斐波那契额是二级递推数列,从第三项起,每项为前两项的和,利用函数的递归可以很好实现,只需每次返回n-1 和 n-2 即可,上代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int fib(int n)
{
if (n <= 2)
return 1;
else
return fib(n - 1) + fib(n - 2);
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d", &n);
ret = fib(n);
printf("%d\n", ret);
return 0;
}
当然,这样的思路在求项数较大的数时极其缓慢,这是因为每项都需要递推到前两项,造成大量重复,像这样:
50
49 48
48 47 47 46
47 46 46 45 46 45 45 44
......
可见中间进行了大量的重复,需要修改思路。
改用循环的方式,可以避免过多的重复计算。
首先,定义三个变 量abc, 初始令int a = 1; int b = 1; int c = a + b;
然后,将b的值赋给a,c的值赋给b,循环c= a+b即可。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int fib(int n)
{
int a = 1;
int b = 1;
int c = 1;
while (n > 2)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d", &n);
ret = fib(n);
printf("%d\n", ret);
return 0;
}