回 帖 发 新 帖 刷新版面

主题:[讨论]急!!怎么用递归做菲波拉契数列!

a0=0
a1=1
a2=a0+a1
....
将第N项的A(N)写成递归函数计算.

回复列表 (共7个回复)

沙发

f[n]:=f[n-1]+f[n-2]

板凳

var s:longint;
function digit(p:longint);
begin
  if p=1 then digit:=0
         else if p=2 then digit:=1
                     else digit:=digit(p-1)+digit(p-2);
end;
begin
  readln(s);
  writeln(digit(s));
end.

3 楼

[quote]var s:longint;
function digit(p:longint);
begin
  if p=1 then digit:=0
         else if p=2 then digit:=1
                     else digit:=digit(p-1)+digit(p-2);
end;
begin
  readln(s);
  writeln(digit(s));
end.[/quote]


这种方法数据一大肯定超时!
还是用数组保存结果这样比较快

4 楼

但楼主要用递归算啊

5 楼

同意3楼看法.(一般当n<20时可以秒出结果(0(20log(20)),但一般用数组(O(n))更快

6 楼

利用递归+数组:
var s:longint;
a:array[1..100]of longint;
function digit(p:longint):longint;
begin
if a[p]>0 then begin digit:=a[p];exit;end;
  if p=1 then a[p]:=0
         else if p=2 then a[p]:=1
                     else a[p]:=digit(p-1)+digit(p-2);
digit:=a[p];
end;
begin
fillchar(a,sizeof(a),0);
  readln(s);
  writeln(digit(s));
end.

7 楼

function fibo(var n:integer):integer;
  var i,j,k:integer;
  begin
    if (n=1)or(n=2) then fibo:=1
           else fibo:=fibo(n-1)+fibo(n-2);
  end;
begin  
  for i:=1 to n do
    write('  ',fibo(i));
  打印菲波拉契数列前n项

我来回复

您尚未登录,请登录后再回复。点此登录或注册