利用递归的方法给出斐波那契数列的前n项。
提示:
仔细观察递归公式:
fn=fn−1+fn−2
fn−1=fn−2+fn−3
从上面的表达式可以看出fn−2在求fn和fn−1的时候会递归计算两次,这会造成计算速度较慢的问题,考虑针对这个进行优化。
请注意算法的优化,递归的方法若在递归层次较深的情况下,运行时间较长,思考如何提高递归的效率
输入格式:
一行输入斐波那契数列的项数n
输出格式:
以列表的形式输出斐波那契数列的前n项
输入样例:
在这里给出一组输入。例如:
5
输出样例:
在这里给出相应的输出。例如:
[1, 1, 2, 3, 5]
输入样例:
在这里给出一组输入。例如:
40
输出样例:
在这里给出相应的输出。例如:
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584
思路:把前两个记录进行存储,每次循环就要进行更新。
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("[1, 1, ");
int sum1=1,sum2=1,result;
for(int i=3;i<=n;i++)
{
result=sum1+sum2;
if(i!=n)
{
printf("%d, ",result);
}
else
{
printf("%d]",result);
}
sum1=sum2;
sum2=result;
}
}