/*
斐波那契数列:
1 1 2 3 5 8 13 21 34 55 。。。。。。
方法一:递归
复杂度为:O(2^(N/2))<=T(N)<=O(2^N)
当递归的层数较大时,使用递归算法的时间就会很长。
方法二:非递归
复杂度为:n,但需要开辟空间(代价较小)。
*/
#include<stdio.h>
int Fibonacci_recursive(int level)
{
if (level <= 2)
{
return 1;
}
return (Fibonacci_recursive(level - 1) + Fibonacci_recursive(level - 2));
}
int Fibonacci(int level)
{
int num=1;
int before1=1, before2=1;
if (level <= 2)
{
num = 1;
}
else
{
for (int i = 2; i < level; i++)
{
num = before1 + before2;
before2 = before1;
before1 = num;
}
}
return num;
}
int main()
{
int level = 0, num = 0;
printf("请输入时间(level>=0):");
scanf("%d", &level);
num = Fibonacci(level);//非递归
printf("第%d个月一共有%d之兔子(非递归)\n", level, num);
num = Fibonacci_recursive(level);//递归
printf("第%d个月一共有%d之兔子(递归)\n",level,num);
return 0;
}
斐波那契数列
最新推荐文章于 2024-11-21 22:08:10 发布