递归法
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int count = 0;//定义一个全局变量 来计算算了多少次
int fib(int n)
{
if (n == 3)
count++;
if (n <= 2)
return 1;
else
return fib(n - 1) + fib(n - 2);
}
//数太大 效率低 每一层多乘2 值太大会导致栈溢出
int main()
{
int n = 0;
scanf("%d", &n);
int ret = fib(n);
printf("%d\n", ret);
printf("\ncount=%d\n", count);
return 0;
}
迭代法
#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;
scanf("%d", &n);
int ret = fib(n);
printf("%d\n", ret);
return 0;
}