pascal 递归的方法做问题

1、用递归的方法求1+2+3+……+N的值。
2、用递归函数输出斐波那契数列第n项。0,1,1,2,3,5,8,13……
3、输入一个非负整数,递归方法输出这个数的倒序数。例如输入123,输出321。
4、用递归算法将数组A中的N个数倒序输出。
5、用递归方法求N个数中的最大数及其位置。
6、用递归算法将一个十进制数X转换成任意进制数M(M<=16)。
其中第3个 第6个 较为重要 其他可以省略……

我直接写出最重要的把,只写子程序好了。
3:
procedure f(x,s:longint);
begin
if x=0 then begin writeln(s);exit;end;
f(x div 10,s*10+x mod 10);
end;
主程序中: f(x,0);(x是要颠倒的数);

6:
procedure f(x,s,t:longint);
begin
if t=0 then begin writeln(s);exit;end;(我直接用颠倒数字,为了防止最后的零不输出,我就设定了位数)
f(x div 10,s*10+x mod 10,t-1);
end;
procedure f1(x,s:longint);
var
t:longint;
begin
if x=0 then begin f(s,0,t);end;
t:=t+1;
f(x div m,s*10+(x mod m));
end;

主程序中:readln(m);(进制);f1(x,0);(x是要换进制的数);
如果用数组的话可以更好一点,我这样直接
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-14
递归么?
3:
直接字符串读入,用delete删除空格
然后length长度,倒序输出就OK啦。
6:
。。。包括负进制么。。。
以下是大于等于2进制的(不能用于高精数)n进制转成m进制

var (nz是原来的进制,mz是要转换的进制,str是要转的数)
Str: string;
nz, mz: 2..36;
a: Byte;
i, n, j, k, m: Integer;
h: Int64;
a1: array[1..60] of Integer;

function e(x, y: Integer): Int64;
var
z: Integer;
begin
e := 1;
for z := 1 to y do
e := e * x;
end;

begin

Readln(nz);
Readln(mz);
Readln(Str);
i := Length(Str);
n := 0;
h := 0;
for j := i downto 1 do
begin
if a < 10 then
a := Ord(Str[j]) - Ord('0')
else
a := Ord(Str[j]) - Ord('A');
h := h + a * e(nz, n);
n := n + 1;
end;
m := 1;
while h <> 0 do
begin
j := h mod mz;
h := h div mz;
a1[m] := j;
m := m + 1;
end;
for k := m - 1 downto 1 do
begin
if a1[k] < 10 then
Write(a1[k])
else
Write(Chr(a1[k] + 65));
end;
end.
相似回答