三种方式实现fibonacci数列
- 递归
- 非递归
- 尾递归
尾递归脑中演算运行一下就应该可以理解了。
非递归是根据公式,推导不会,会用就好。
/*
2.递归与分治
Fibonacci数列
*/
#include <stdio.h>
#include <math.h>
int fibonacci(int n)
{
if(n >= 0)
{
if(n == 0) return 1;
else if(n == 1) return 1;
else
{
return fibonacci(n-1)+fibonacci(n-2);
}
}
else return -1;
} //递归
int fibonacci2(int n, int num1, int num2)
{
if(n >= 0)
{
if(n == 0) return num1;
else return fibonacci2(n-1,num2,num1+num2);
}
else return -1;
} //尾递归
int fibonacci3(int n)
{
int i;
int result;
for(i = 0; i <= n; i++)
{
result = 1/sqrt(5)*(pow(((1+sqrt(5))/2),i+1) - pow(((1-sqrt(5))/2),i+1));
}
return result;
} //非递归
int main()
{
int n;
scanf("%d",&n);
printf("%d\n", fibonacci(n));
printf("%d\n", fibonacci2(n,1,1));
printf("%d\n", fibonacci3(n));
return 0;
}