斐波那契数的定义:
1 1 2 3 5 8 13 21 34 55 89..........,简单来说,就是第三个数等前两个相加,基于这个原理,我们很容易实现递归法的求值。
递归法代码和思路 :
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int fib(int n)
{
if (n <= 2)//1和2的时候,返回1(得到1)
return 1;
else
{
return fib(n - 1) + fib(n - 2);//大于二的时候,返回前两个数的斐波那契数之和
}
}
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)//多次输入的写法
{
int ret = fib(n);
printf("%d\n", ret);
}
}
迭代法代码和思路:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int fib(int n)
{
int a = 1;//第一个斐波那契数
int b = 1;//第三个斐波那契数
int c = 0;//第三个值
while (n > 2)//第三个数开始进入循环
{
c = a + b;//假设n是3,c=1+1
a = b;//第二个斐波那契数赋值给第一个斐波那契数
b = c;//第三个斐波那契数赋值给第二个斐波那契数
n--;//循环次数减1
}
return c;
}
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
if (n == 1 || n == 2)//等于1和2的时候,返回1,不进入循环
{
printf("1\n");
break;
}
int ret = fib(n);
printf("%d\n", ret);
}
return 0;
}