何为斐波那契数列?
斐波那契数列就是:1 1 2 3 5 8 13 21 34……这样一串有规律的数,即从第三个数开始,该数字为前两个数字之和
那么要计算第N个数字,就必须知道N-1,N-2的值…
以此类推
递归算法实现(首选)
递归算法,代码简介但是效率低
int D_fib(int n)
{
if(n == 1 || n == 2) //第一个和第二个数均为1
return 1;
else
{
return F_fib(n-2) + F_fib(n-1);
}
}
非递归
int F_fib(int n)
{
int i = 1;
int j = 1;
int ret = 1;
int k = 0;
for(k=3; k<=n; k++)
{
ret = i + j;//要计算的数ret为前两个数i,j之和
//i,j分别保存ret的前两位数字
i = j; //i往后挪一位
j = ret;//j往后挪一位
}
return ret;
}
附上完整代码
#include <stdio.h>
int F_fib(int n)
{
int i = 1;
int j = 1;
int ret = 1;
int k = 0;
for(k=3; k<=n; k++)
{
ret = i + j;//要计算的数ret为前两个数i,j之和
//i,j分别保存ret的前两位数字
i = j; //i往后挪一位
j = ret;//j往后挪一位
}
return ret;
}
int D_fib(int n)
{
if(n == 1 || n == 2) //第一个和第二个数均为1
return 1;
else
{
return F_fib(n-2) + F_fib(n-1);
}
}
int main()
{
int num = 0;
printf("请输入数字:");
scanf("%d",&num);
printf("递归算法:%d\n", D_fib(num));
printf("非递归算法:%d\n",F_fib(num));
return 0;
}