由一个例子引起的对递归原理的理解。
2015-07-09 13:16
267 查看
今天由一个例子来对递归函数执行过程进行简要的剖析。
递归,所用到的底层数据结构是栈。即遵循先进后出原则,保存、读取变量。
如果我们想要运用递归,必须满足两个条件:
1,确定初始条件。确定递归何时结束。
2,该问题能够用分治思想,将大问题分解为小问题。
每次,递归调用前,现将函数变量值压入栈;递归结束后,再将变量依次弹出。
下面是一个例子:
程序执行过程:
1.执行6-15行。
第一次入栈,num=4;
...
第五次,num=0;
DOS窗口打印:5 4 3 2 1 0
2.当num=0,执行8行。 if num==0,DOS窗口打印:1:0。注意,在返回之前,应先将栈销毁。
3.执行16-17行,依次将num弹出栈。
2:0
:::
______
______
2:4
:::
4.执行第18行,返回num=4。销毁num栈。
注意,如果没有第18行,这时候返回的是一个任意值。因为,在执行第17行后,num栈元素已经全部弹出,num此时变成一个任意值。
调试结果如下:
递归,所用到的底层数据结构是栈。即遵循先进后出原则,保存、读取变量。
如果我们想要运用递归,必须满足两个条件:
1,确定初始条件。确定递归何时结束。
2,该问题能够用分治思想,将大问题分解为小问题。
每次,递归调用前,现将函数变量值压入栈;递归结束后,再将变量依次弹出。
下面是一个例子:
程序执行过程:
1.执行6-15行。
第一次入栈,num=4;
...
第五次,num=0;
DOS窗口打印:5 4 3 2 1 0
2.当num=0,执行8行。 if num==0,DOS窗口打印:1:0。注意,在返回之前,应先将栈销毁。
3.执行16-17行,依次将num弹出栈。
2:0
:::
______
______
2:4
:::
4.执行第18行,返回num=4。销毁num栈。
注意,如果没有第18行,这时候返回的是一个任意值。因为,在执行第17行后,num栈元素已经全部弹出,num此时变成一个任意值。
调试结果如下:
相关文章推荐
- 对uboot中CFG_和CONFIG_的理解
- python,tonardo模板中for循环,获取index
- 2012年5月SAT香港真题解析
- C++ cin.get() 函数重载
- 安卓安装一个程序的代码
- Java项目迁移中的问题
- VS2010: WinSDK7.1版DirectShow--从安装到使用
- C++链接ODBC数据源:VS2013,Access
- 安卓分享功能
- 【第二篇】学习 android 事件总线androidEventbus之异步事件的传递
- 课程设计:十大歌手排行榜
- 12C -- 配置EM Express的端口
- 6.2-2
- jquery select选中表单特效三级联动
- 再说约瑟夫环
- WPF 多语言
- Python发邮件
- iOS添加日期选择器
- 解题报告:线段树的查询
- 安卓卸载一个程序的代码