首先,需要先了解什么是斐波那契数列?
斐波那契数列:
数学上以递推的方法定义:F(0) = 0,F(1) = 1, F(n) = F(n - 1) + F(n - 2)(n ≥ 2,n ∈ N * )
0、1、1、2、3、5、8、13、21、34、……
递归写法
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int F(int n)
{
if (n == 0)
{
return 0;
}
else if (n == 1)
{
return 1;
}
else
{
return F(n - 1) + F(n - 2);
}
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = F(n);
printf("%d\n", ret);
return 0;
}
大家有没有发现这个代码有一定的问题,那就是当n的值较大时,会有很多次重复计算,当n=30时,F(0)会被重复计算514229次;当n=40时,F(0)会被重复计算63245986次(计算时间已经需要六七秒);当n=50时,会发现计算结果久久不能出来;代码效率很低。
这个时候我们可以考虑用迭代的方法。
迭代写法
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int F(int n)
{
int a = 0;
int b = 1;
int c = 0;
if (n == 0)
{
return 0;
}
else if(n == 1)
{
return 1;
}
while (n > 1)
{
c = a+b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = F(n);
printf("%d\n", ret);
return 0;
}