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])
大概就是上面的思路吧,加点前缀什么的应该就可以了。

C语言编程问题:用Fibonacci数列为:1,1,2,3,5,8,13,...。
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...

用C语言编程 斐波那契数列:1,1,2,3,5,8,13…,输出前13项,每行输出5个...
return getSum(num- 1) + getFibo(num- 2);} public static void main(String[] args) { System.out.println("斐波那契数列的前13项为:");for (int i = 1; i <= 13; i++) { System.out.print(getSum(i) + "\\t");if (i % 5 == 0)System.out.println();} } } ...

Fibonacci数列;1,1,2,3,5,8...,它可由下列公式表达F(1)=1 ifn=1
如果设F(n)为该数列的第n项(n∈N+)。那么这句话可以写成如下形式:F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3)显然这是一个线性递推数列。通项公式的推导方法一:利用特征方程 线性递推数列的特征方程为:X^2=X+1 解得 X1=(1+√5)\/2, X2=(1-√5)\/2.则F(n)=C1*X1^...

C语言:编写程序用数组处理求解Fibonacci数列前20项之和并输出。
斐波那契数列通项公式:斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、……这个数列从第三项开始,每一项都等于前两项之和。include<stdio.h> int main(){ int a[20]={1,1},i=2;printf("a[0]=a[1]=");for(i=2;i<20;i++){ a[i]=a[i-1]+a[i-2];\/\/ a...

C语言用递归 .斐波那契数列是: 1、1、2、3、5、8、13、21、…… f(0...
C语言用递归.斐波那契数列是:1、1、2、3、5、8、13、21、……f(0)=1.f(1)=1的加算回数不算f(2)=2--加1回f(3)=3--加3回f(4)=5--加7回急求!谁告诉我为什么加了3回和7回求大师明解... C语言用递归.斐波那契数列是:1、1、2、3、5、8、13、21、……f(0)=1. f(1)=1的加算回数...

c语言,编程实现,求斐波那契数列,1,1,2,3,5,8,...的前20项及前20项和...
C语言源程序如下:include<stdio.h> int main(){ int array[100]={1,1};\/\/斐波那契数列前两个元素均为0 int i=0;\/\/循环变量 int n=20;\/\/数列需要求的个数 int sum = 0;\/\/和变量 for(i=2;i<n+1;i++)\/\/按递推原理依次求出后续元素 { array[i]=array[i-1]+array[i-2];\/...

数列1,1,2,3,5,8,13,...称为斐波那契数列。编程计算第20个数字是多少...
以下程序是输出斐波那契数列钱20个数,你照这个输入,最后一个数就是第二十个数了 include<stdio.h> void main(){ int f[20]={1,1},i;for(i=2;i<20;i++)f[i]=f[i-1]+f[i-2];{ if(i%5==0)printf(''\\n'');printf(''%5d'',f[i]);} } ...

斐波那契数列:1,1,2,3,5,8,13,21,34……第20位数是( )程序怎么解?_百度...
递归函数 F(n)=F(n-1)+F(n-2)本题规模不大,可以手工计算,也可以excel表格计算 F(20)=6765 附:excel表计算结果

...数列指的是这样一个数列:1,1,2,3,5,8,13, 这个数列从第三项开始...
void){ int a,b,i,T,n; while(1){ printf("Input T(int 0<T<11)...\\nT="); if(fflush(stdin),scanf("%d",&T) && T>0 && T<11) break; printf("Error, redo: "); } while(T--){ while(1){ printf("Input n(int 0<n<21)...\\nn="...

用C语言编程输出数列1,1,2,3,5,8,13,21的前20 项
这个问题所输出的数列叫Fibonacci数列 是一个有趣的古典数学问题 来源:有一对兔子,从出生后第3个月起每一个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有的兔子都不死,问每个月的兔子总数为多少?也就是说 后一个数是前2个数的和 测试系统 Turbo c 3.0 include <...

相似回答