题目一 递归和非递归分别实现求第n个斐波那契数
-
分析
“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34
通过数学归纳法 可以推出通项公式 F(1)=1,F(2)=1, F(3)=2,F(n)=F(n-1)+F(n-2)(n>=4,n∈N*) -
思路
递归思想,将大问题化为小问题,当满足递归条件是就依次返回.
从这张图的中的文字 “吓得我抱起了 抱着 抱着 抱着 我的小鲤鱼 的我 的我 的我“
我们可以知道 从(我抱起了)开始 —》(我的小鲤鱼结束) 就像一个调用过程,从(我的小鲤鱼)到最后一个字(我),就是一个返回过程,从我开始,也从我结束,这就是递归,有来有回。 -
实现
void Fib(int n) {
long long first = 1;
long long second = 1;
long long ret = 0;
if (n == 1 || n == 2)
{
printf("斐波那契数是:%d", n);
}
else
{
for (int i = 3; i <= n; i++)
{
ret = first + second;
first = second;
second = ret;
}
printf("斐波那契数是:%d", ret);