Fibonacci number,后一个数是前面两个数的和。
第一种方法,循环相加求和,实现如下:
/***********************************************************************************************
* 斐波拉契著名的数学问题,即斐波拉契数列 1 1 2 3 5 8 13 ......
* 假设每对兔子每月能生一对小兔子,小兔子长到第3个月时也开始生兔子。假设兔子不会死,问第n个月有多少个兔子
* 显然,从第三个数字开始,每个数字都是前两个数字之和。
* *************************************************************************************/
#include
int main() /* 确定第n个Fibonacci numbedr, n从0开始 */
{
int i, n, sum0 = 1, sum1 = 1, sum = 0;
scanf("%d", &n);
if(n<0)
printf("Input is error. ");
else
{
if(n<2)
sum = sum0 = sum1 = 1;
else
{
for(i=2;i<=n;i++)
{
sum = sum1 + sum0;
sum0 = sum1;
sum1 = sum;
}
}
printf("Fibonacci(%d) is %d ", n, sum);
}
return 0;
}
2、另一种简单的方法,就是利用函数的递归调用,实现如下:
/********************************************
* 用函数递归调用的方法来求Fibonacci number;
* 显然,f(0) = f(1) = 1;
* f(n) = f(n-1)+f(n-2)
* ******************************************/
#include
int f(int);
int main()
{
int n, i, fib=0;
scanf("%d", &n);
for(i=0; i
{
fib = f(i);
printf("Fibonacci(%d) is %d ", i, fib);
}
return 0;
}
int f(int n)
{
int fib=0;
if(n==0 || n==1)
fib = 1;
else
fib = f(n-1)+f(n-2); /* 函数f递归调用 */
return fib;
}
上面两种方法都只对小的数字有效,如果要求数字比较大的Fibonacci number,比如求Fibonacci(30),显然,任何数据类型的取值范围都不能满足。这时,就要用到前面的大数相加的自定义函数了。
阅读(1567) | 评论(0) | 转发(0) |