一个递归函数的成长史
来源:互联网 发布:淘宝的运营模式是商户 编辑:程序博客网 时间:2024/06/10 02:56
昨天看了归并排序和快速排序,排序的思路都理解了,代码是使用递归实现的,但是在单步调试的时候,断点跳来跳去,整个人都晕了,所以我执着的精神又开始发挥作用了,在网上找了个类似的例子,一步步调试过来,终于断点如我所愿的跳了出来。决定把思路整理一下,这也是菜鸟成长史的一小步吧,言归正传。
一、什么是递归函数?
递归函数即自调用函数,在函数体内直接或间接调用自己(也就是调用的函数是自己本身)。
二、函数的调用机制
1、需要设置自调用的条件,如果满足条件,则调用函数本身,如果不满足条件,则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行;
2、每调用一次函数就“入栈”一次,函数执行完了,就“出栈”一次;
三、递归的评价
1、缺点:递归增加了系统的开销,从时间上,执行调用与返回的额外工作需要占用一定的时间,从空间上来讲,每递归一次,就要入栈一次,即栈内存就多占用一截。
2、优点:简化程序设计、程序容易读懂。
下面这几个是个人觉得关于递归函数和递归函数的执行机制,写的很容易理解的博文:递归函数理解、递归函数的执行机制和运用、深入理解递归函数的调用过程
四、华丽丽的成长史
这个是我参考的博文,递归算法示例,写的很详细、通俗易懂。
首先贴出代码:
下面是整个程序的执行过程:
对结果进行分析:
a、步骤10~14重复了步骤4~8,因为它们都调用了p(1),所以结果5重复了结果4,输出都是1;
b、步骤17~29重复了步骤3~15,因为它们都调用了p(2),所以第6、7、8个结果重复了第3、4、5个结果,输出都是2、1、1;
c、步骤31~58重复了步骤2~29,因为它们都调用了p(3),所以第9~15个结果重复了第2~8个结果,输出都是3、2、1、1、2、1、1。
总之,要理解函数递归调用的机制必须明白每对函数进行一次调用,函数就入栈一次,函数执行完了,就出栈一次,如果还不是很明白,可以结合程序运行过程的说明,对代码进行单步调试,这样会比较容易理解。
迈过了递归的坎儿,终于可以整理归并排序和快速排序的知识点了,很开森的我于是就屁颠屁颠的跟着师父去兴庆公园赏花啦!
- 一个递归函数的成长史
- 一个递归函数的分析
- 一个程序员的成长史
- 写一个简单的递归函数
- 一个递归计算数学表达式的函数
- 递归函数求一个数的阶乘
- C++ - 编写一个从字符串转变成长整型的函数
- 一个C++菜鸟的成长史
- 读《一个程序员的成长史》有感
- 一个菜鸟的心酸成长史
- 一个程序员的成长
- 一个软件工程师的成长
- 一个嵌入式的成长
- 一个程序员的成长
- 一个程序员的成长
- 一个网站的成长
- 一个计算机高手的成长
- 一个计算机高手的成长
- Flex弹出窗口
- macOS Sierra中使用VMware Fusion安装centos7
- 采用的架构 BlazeDS + Spring + Hibernate
- Flex实现自定义ToolTip 动态加载
- [已解决]Delphi XE10 Android 程序引用百度定位Jar包后, 某些手机上闪退的问题
- 一个递归函数的成长史
- myeclipse2013 svn插件安装
- 解决host重定向屏蔽网站或无法显示此网页 错误代码: ERR_CONNECTION_REFUSED
- Maven问题汇总
- "暗黑话题":如何给自己的私活项目标价
- Linux基础学习——unit10
- maven 创建java项目, web项目
- 设计模式学习笔记——状态(State)模式框架
- Handle 相关