c语言 斐波那契数列

        //斐波那契数列

   斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1]  )以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

递归法

//递归法
#include<stdio.h>
 #include<stdlib.h>
int  fib(int n)

{ 
    
 if(n<=1)
               
           return n;//第0个数为0;第一个数为1;
      
  else
                
           return   fib(n-1)+fib(n-2);//第n数等于第n-1个数加上第n-2个数;
           }
          int main()

            {
                     int  n,count ;

                     printf("         求第n个斐波那契数 \n");

                     printf("请输入n的大小:");

                      scanf_s("%d",&n);

                       printf("第%d个斐波那契数为:%d",n,fib(n));

                      system("pause");

                      return 0;
                }


输出结果:

c语言 斐波那契数列_第1张图片


这种算法会造成很多的重复造成计算量变大,运行变慢




//数组方法

#include<stdio.h>
        #include<stdlib.h>
int  fib(int n)

int a[100]={0,1};
if(n<=1)
         return a[n];//第0个数为0;第一个数为1;
    else
{   
int i=0;
    for(i=2;i<=n;i++)
a[i]=a[i-1]+a[i-2];
return a[n];

}//第n数等于第n-1个数加上第n-2个数;
}
int main()
{
  int  n;
  printf("         求第n个斐波那契数 \n");
 printf("请输入n的大小:");
  scanf_s("%d",&n);
  printf("第%d个斐波那契数为:%d",n,fib(n));
  system("pause");
  return 0;
     


}

//此算法有明显的缺陷,只能求100以内的,并且速度不快


//采用参数法,只记录第n,n-1,n-2个数

#include<stdio.h>
#include<stdlib.h>
int  fib(int n)

int a=0,b=1,c=n;
int i;
for(i=0;i<n-1;i++)
{
    c=a+b;
a=b;//把第n-2赋给a
b=c;//把第n-1赋给b

}
return c;
}
int main()
{
  int  n;
  printf("         求第n个斐波那契数 \n");
  printf("请输入n的大小:");
  scanf_s("%d",&n);
  printf("第%d个斐波那契数为:%d",n,fib(n));
  system("pause");
  return 0;
     


}



你可能感兴趣的:(C语言,斐波那契数列)