一个递归函数的成长史

作者: 素娜93 | 来源:发表于2017-04-09 18:29 被阅读144次

昨天看了归并排序和快速排序,排序的思路都理解了,代码是使用递归实现的,但是在单步调试的时候,断点跳来跳去,整个人都晕了,所以我执着的精神又开始发挥作用了,在网上找了个类似的例子,一步步调试过来,终于断点如我所愿的跳了出来。决定把思路整理一下,这也是菜鸟成长史的一小步吧,言归正传。

一、什么是递归函数?

递归函数即自调用函数,在函数体内直接或间接调用自己(也就是调用的函数是自己本身)。

二、函数的调用机制

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。

总之,要理解函数递归调用的机制必须明白每对函数进行一次调用,函数就入栈一次,函数执行完了,就出栈一次,如果还不是很明白,可以结合程序运行过程的说明,对代码进行单步调试,这样会比较容易理解。


迈过了递归的坎儿,终于可以整理归并排序和快速排序的知识点了,很开森的我于是就屁颠屁颠的跟着师父去兴庆公园赏花啦!

P(4) P(3) P(2) P(1)

相关文章

  • 一个递归函数的成长史

    昨天看了归并排序和快速排序,排序的思路都理解了,代码是使用递归实现的,但是在单步调试的时候,断点跳来跳去,整个人都...

  • 递归函数

    1.递归函数概述及用法 一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数 的递归...

  • 029_wz_hm_函数的递归

    函数的递归 函数调用自身的编程技巧成为递归 递归函数的特点 特点: 一个函数内部调用自己 函数内部可以调用其他函数...

  • 复习笔记之函数进阶(2)

    递归 如果一个函数在内部可以调用其本身,那么这个函数就是递归函数简单理解:函数内部自己调用自己就是递归函数(递归函...

  • 递归函数

    递归函数定义:调用自身的函数叫做递归函数 递归函数的注意:至少有一个出口(返回),以免陷入死循环 递归和迭代的区别:

  • JavaScript递归函数

    JavaScript 支持函数的递归调用。 所谓递归函数,就是在函数体内调用函数本身。 使用递归函数的一个常见例子...

  • Python学习笔记五(函数、文件)

    函数 递归函数 什么是递归函数? 在一个函数的内部调用自身的函数,称为递归函数。注意: 分解:原问题可以分解为若干...

  • 前端算法学习-前篇

    递归 JavaScript中允许函数递归调用,示例: 当一个函数呗递归调用时,递归没有完成,函数的计算结果会被暂时...

  • Day10递归函数、模块、迭代器、生成器

    一、递归函数 1、什么是递归函数 在函数中调用函数本身的函数就是递归函数。 2、递归的作用 循环能做的递归都能做 ...

  • day11 函数(3)

    递归函数 实际开发的时候,能不用递归就不用 什么是递归函数 函数中调用函数本身的函数就是递归函数 递归的作用: 循...

网友评论

    本文标题:一个递归函数的成长史

    本文链接:https://www.haomeiwen.com/subject/teidattx.html