题解:
明确问题:给定一个数n,计算关于斐波那契数列的第n项的和。
解题思路:由题目可知
(1)当n>=2时,每一项为前两项的和,即第n项等于第n-1项+第n-2项
(fib(n)=fib(n-1)+fib(n-2))。
(2)当n<2时,返回n的值即可。
递归算法(效率较低):
#include<stdio.h>
int fib(int n)
{
if(n<2)
{
return n;
}
else
{
return fib(n-1)+fib(n-2);
}
}
int main()
{
int n;
int m;
scanf("%d",&n);
m=fib(n);
printf("%d",m);
return 0;
}
动态规划:由于存在递推关系:F(n)=F(n-1)+F(n-2),因此也可以采用动态规划方法求解。状态转移方程为上述递推关系,边界条件为:F(0)和F(1)。
代码:
#include<stdio.h>
int fib(int n)
{
if(n<2)
{
return n;
}
int a=0;
int b=1;
int c=0;
while(n>=2)
{
c=a+b;
a=b;
b=c;
n--;
}
return c;
}
int main()
{
int n;
int ret;
scanf("%d",&n);
ret=fib(n);
printf("%d",ret);
}