题目在线测试连接:斐波那契数列_牛客网 (nowcoder.com)
题目:
现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。
n≤39
注:斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……
递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
题解:
方法一:自顶向下递归调用
int Fibonacci(int n) {
if(n==0)
return 0;
else if(n==1)
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2);
}
运行时间:623ms 占用内存:484KB
方法二:自顶向下,保存见过的数字项值
int f[39]={0};
int Fibonacci(int n) {
if(n==0)
return 0;
else if(n==1)
return 1;
if(f[n-1]==0)
f[n-1] = Fibonacci(n-1);
if(f[n-2]==0)
f[n-2] = Fibonacci(n-2);
return f[n-1]+f[n-2];
}
运行时间:2ms 占用内存:376KB
讨论区的较优解:自底向上
从第零项开始加,加至第N项
int Fibonacci(int n) {
int f = 0, g = 1;
while(n--) {
g += f;
f = g - f;
}
return f;
}
运行时间:2ms 占用内存:380KB