斐波那契数定义
斐波那契数亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列和兔子数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*),用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。
此处我们规定第一项和第二项为1,之后的斐波那契数列系数就由之前的两数相加。
方法一:用非递归法求第n个斐波那契数
#include<stdio.h>
int main()
{
int i=1;
int j=1;
int sum=0;
int n=0;
scanf("%d",&n);
if(n<=2)
sum=1;
//输出的是前两项的值
else
while(n>2)
{
sum=i+j; //第n位值的计算
j=i; //记录第n-2位的值
i=sum; //记录第n-1位的值
n--;
}
printf("%d\n",sum);
return 0;
}
方法 二:用递归法求斐波那契数
#include<stdio.h>
int fun(int n)
{
if(n>=3)
return n=fun(n-1)+fun(n-2);
//利用前两项的值求第三项的值
else
return 1;
}
int main()
{
int a[ ]={0};
int n=0;
scanf("%d",&n); //1 1 2 3 5 8 13 21 34 55
printf("%d\n",fun(n));
return 0;
}
【结束语】
两种方法比较而言各有长处,就程序可读性来说个人觉得递归法简单易懂。而非递归法显得过于繁琐。但是对于初学者来说非递归法显得更贴切,初学者仔细阅读后就能够明白这种方法每一个语句所表达的意思 。