关闭

递归入门(十) ---- 打印数字(递归原理详解)

标签: 递归
994人阅读 评论(0) 收藏 举报
分类:

递归的原理:

对于递归来说,建议大家先去学习栈,然后再来看这篇博客更有意义。

大多数对于递归的解释是,自己调用自己。书面很不好懂,我的前几篇递归系列的博客已经有写几个例子,

但是感觉也不是很适合基础,这里来细讲一下。


递归的底层实现其实是一个栈.栈的特点是后进先出,

也就是最后进入栈的事件是最先被处理的.


例如计算n!

  n *  f(n-1)                                                                     然后f(n - 1)待解决,那么进入下一行  入栈

  n * n - 1 *f(n-1)                                                            然后f(n - 1)待解决,那么进入下一行  入栈

  n * n - 1 * n -2 * f(n-1)                                                 然后f(n - 1)待解决,那么进入下一行  入栈

 ........

...................

........................直到

f(n - 1) = 0时候,不执行了,那么f(n-1) = 0前面的就是: 分别从 1 2 3 4 ......分别出栈,然后计算就是

n * (n - 1) * (n - 2) * (n - 3) * .................... 3 * 2 * 1 = n!

各位懂了吗?


举个例子:


打印数字,利用递归形式打印

           1

           2 2

           3 3 3


代码如下:

<span style="font-size:18px;">//杨鑫
#include <stdio.h>
void print(int w)
{
	int i;
	if(w != 0)
	{
		print(w - 1);
		for(i = 1; i <= w; i++)
		{
			printf("%3d", w);
		}
		printf("\n");
	}
}
int main()
{
	print(3);
	return 0;
}</span>


结果如图:




分析:


这里递归的过程:


应该是3先进来,然后没有执行,

然后变成2,然后也没有执行,

然后变成1,然后也没有执行,

然后是0,不满足,

然后返回时1,执行,

然后是返回2,执行,

然后是返回3,执行

最终答案:

1

2 2

3 3 3


各位懂了吗?

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1204346次
    • 积分:24862
    • 等级:
    • 排名:第262名
    • 原创:1328篇
    • 转载:21篇
    • 译文:7篇
    • 评论:226条
    博客专栏
    最新评论