C语言编程问题:用Fibonacci数列为:1,1,2,3,5,8,13,....。

用Fibonacci数列为:1,1,2,3,5,8,13,....。用递归法编写求Fibonacci数的函数,在主函数中输入一个自然数,输出不小于该自然数的最小的一个Fibonacci数。

修改一下max = cond+3;

========================

 

#include<stdio.h>

 

int fibonacci(int n)

{

 if(n== 1 || n==2)

 {

  return 1;

 }

 else

 {

  return fibonacci(n-1) + fibonacci(n-2);

 }

}

 

int main()

{   

 int cond;

 int i = 1;

 int max;

 int val;

 

 

 printf("请输入一个数:");

 scanf("%d",&cond);

 

    max = cond+3;

 

    for(i=1; i<max; i++)

 {

  val = fibonacci(i);

        printf("%d ",val);

  if(val >= cond)

  {

   break;

  }

 }

 

  printf("\n不小于自然数%d的最小的一个Fibonacci数为:%d\n",cond,val);

 

}

 

 

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-22
int fibo(int n) {
if (n <= 2) return 1;
else return fibo(n - 1) + fibo(n - 2);
}
这是递归函数, 输入的n表示你要数列的第n项
main函数就自己写吧, 从小到大枚举就可以了, 懒得写了

另外稍微说一下, 如果追求效率的话, 可以在递归过程中缓存所有的运算结果, 用少量的空间换取巨大的效率提升, 还可以参考数列的通项公式, 对大概的项数进行一下预估
第2个回答  2013-04-22
int n=5,a[];
scanf("%d",&n)
a[1]=1;
a[2]=1;
for [i=3;i<=n;i++]
{
a[i]=a[i-2]+a[i-1];
if a[i]>=n;
break;
}
printf("%d",a[i-1])
大概就是上面的思路吧,加点前缀什么的应该就可以了。
相似回答