前提需备知识:
斐波那契数列是第一项和第二项为1,第三项为前两项之和,然后以此类推的一个数列,即1,1,2,3,5,8,13,21,34,55……
递归法:
#include<stdio.h>
int fbnq(int n)
{
if (n == 1 || n == 2) //初始化第一个数和第二个数
{
return 1;
}
else
{
return fbnq(n - 1) + fbnq(n - 2); //斐波那契公式
}
}
int main()
{
int n = 0, fb = 0;
scanf("%d", &n);
fb = fbnq(n);
printf("%d\n", fb);
return 0;
}
非递归法:
#include<stdio.h>
int main()
{
int n = 0, i = 0;
scanf("%d", &n);
if (n == 1 || n == 2) //如果n是第一项和第二项这种特殊项时
{
printf("1\n"); //打印1
return 0; //结束函数
}
int a = 1, b = 1; //初始化第一项和第二项
while (n > 2) //如果是第三项及以上
{
int c = a + b; //c等于前面两项之和
a = b; //b变为新的最前面一项(即原来的a)
b = c; //c变为新的前一项(即原来的b)
if (n - 1 == 2) //如果这次循环结束后次数为2
{
printf("%d\n", c); //就不用再循环了(因为前面两项是初始化好了的)
}
n = n - 1; //减少循环次数1次
}
return 0;
}