核心思想:
1.数列的第1和第2个位置的数字都为:1
2.从第3个数开始,它的值为:i-1(位置) + i-2(位置)的和
3.返回计算出来的值
代码内部:
1.递归实现
1.1 判断是否 > 2,条件满足:return fib(n - 1) + fib (n -2).条件不满足:return 1
2.非递归实现
2.1使用welie()循环,循环条件 n > 2,且再wilie()循环外创建3个值为:1的变量
2.2循环条件满足:cup(储存) = i(前2个位置的值) + j(前1个位置的值)、 i = j(把i的值向前搬); j = cup(把j的值向前搬家); n–(n要发生变化)
2.3循环条件不满足:return cup; ==> 满足了2个需求:1.n < 2,直接返回1,2.while() 循环结束,返回cup值。
代码块
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int fib(int n)
{
//判断是否大于2
if (n <= 2)
{
return 1;
}
else
{
return fib(n - 1) + fib(n - 2);
}
}
int in_fib(int n)
{
int i = 1;
int j = 1;
int c = 1;
//判断是否大于2
while (n > 2)
{
c = i + j;
i = j;
j = c;
n--;
}
return c;
}
int main()
{
//斐波那契数列
//核心思想:
//1.第1、2个数,的值为1
//2.冲第三个数,开始每个数的值为前两个数相加的值
//代码内部:
//1.递归实现
//1.1 写个判断,<= 2,返回1
//1.2 else(否则) return(返回) return fib(n-1) + fib(n-2)
//2.非递归实现
//1.1 判断 <= 2,返回1
//递归实现
int n = 0;
printf("递归实现\n");
printf("请输入要求的第N个斐波拉切数:>");
scanf("%d", &n);
int ret = fib(n);
printf("%d",ret);
return 0;
非递归实现
int n = 0;
printf("非递归实现\n");
printf("请输入要求的第N个斐波拉切数:>");
scanf("%d", &n);
int ret = in_fib(n);
printf("%d",ret);
}