什么是递归?怎么使用递归?
反复调用自身这就是递归。多做题,多总结,自然而然就会使用。
这对很多像我这样的初学者来说,都觉得它很难很难。其实,在我看来,你多做一些递归这样的题,去发现里面的规律,就可以很快的理解递归,并能基本掌握在什么时候使用递归。
//递归实现斐波那契数
斐波那契数是1,1,2,3,5...
规律:前两两项之和等于后一项即n = (n - 1) + (n - 2)
解题思路:1> 使用递归必须分清自己的出口,不然出现死循环。根据题意,当n等1、2时
返回1,这就可以作为递归的出口。
2> 再使用递归反复调用自己(例如此题:开始n=5,调用自己一次,分别产生
n=4,n=3,分别表示n的前一项和前二项,依次往下走第四项又会产生它的
前一项和前二项,最后走到return 1后,依次返回直到返回到最后一个Fe
ibo函数,然后返回计算结果。)
源代码:
#include<stdio.h>
#include<stdlib.h>
//递归实现求第n个斐波那契数。
//斐波那契数是1,1,2,3,5...
//规律:前两两项之和等于后一项即n = (n - 1) + (n - 2)
int FeiBo(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
return FeiBo(n - 1)+FeiBo(n - 2);
}
int main()
{
printf("%d\n", FeiBo(5));
system("pause");
return 0;
}
运行结果:
//非递归实现斐波那契数
解题思路:1> 因为1,2项为1,所以单独处理;
2> 需要定义三个变量分别存放第n项,第n-1项,和第n-2项,是这三个变量
实现累加;
3> 返回运算结果,并输出。
源代码:
#include<stdio.h>
#include<stdlib.h>
//非递归实现斐波那契数
int FeiBo(int n)
{
int i = 0;
int ret = 0;
int n1 = 1;
int n2 = 1;
if (n == 1 || n == 2)
{
return 1;
}
for (i = 2; i < n; ++i)
{
ret = n2 + n1;
n1 = n2;
n2 = ret;
}
return ret;
}
int main()
{
printf("%d\n", FeiBo(5));
system("pause");
return 0;
}
//运行结果:

本文介绍了递归的概念,并通过斐波那契数列的递归和非递归实现来阐述如何使用递归。递归实现中强调了递归出口的重要性,非递归实现则通过定义三个变量进行累加。


437

被折叠的 条评论
为什么被折叠?



