美文网首页
递归函数的理解

递归函数的理解

作者: Me俏 | 来源:发表于2018-08-02 11:46 被阅读0次

对于递归函数的理解,足足花了一天,从刚开始根本想不通为什么会倒过来输出,直到认识其中的原理。接下来,先简单地理解一下,后面再讲原理。

代码例子:

当$n=10时,301行代码输出:10,下一步进入if条件判断。

当运行到test($n-1),即test(9)时,程序下一步跳转到299行代码,接着301行代码输出:9,以此类推,输出结果:10 9 8 7 6 5 4 3 2 1 0

当$n=0时,不符合if条件,309行代码输出:<-->,312行代码输出:0

现在回想过来,当$n=10,9,8,7,6,5,4,3,2,1时,代码都没有执行完毕,意思是接下来需要执行完305-312行的代码,所以需要返回上一层,即$n=1,以此类推

代码执行完输出的结果:

10 9 8 7 6 5 4 3 2 1 0 <--> 0 1 2 3 4 5 6 7 8 9 10

换一个更形象的例子,说明实质原理

代码例子:

先看看这段代码输出的结果

首先,我们需要了解“栈”,栈是先进后执行

第一步:当$i=3时,Recursive(3)先进栈,269行代码输出:Recursive()函数当前的$i=3,接着进入if条件判断,但不符合条件,下一步是else语句。

关键的一句代码就在278行,$sum=3*Recursive(2)。

要想知道Recursive(3)的值,就必须知道Recursive(2)值。

第二步:这时程序跳转到266行,Recursive(2)进栈,开始执行Recursive(2),输出:Recursive()函数当前的$i=2。

程序来到278行,$sum=3*Recursive(2)。

要想知道Recursive(2)的值,就必须知道Recursive(1)值。

第三步:当$i=1时,输出:Recursive()函数当前的$i=1,符合if条件,输出:i=1, sum=1

第四步:程序运行到283,输出:i=1, sum=1。

第五步:返回$sum=1

此时,我们已经知道Recursive(1)的值,就是$sum=1。

刚才说过:

要想知道Recursive(2)的值,就必须知道Recursive(1)值

此时程序将Recursive(1)返回的值,传递给Recursive(2)

第六步:程序运行到278行代码,$sum=2*Recursive(1) (2=2*1)

第七步:283行代码输出:i=2,sum=2

要想知道Recursive(3)的值,就必须知道Recursive(2)值。

此时程序将Recursive(2)返回的值,传递给Recursive(3)

第八步:程序运行到278行代码,$sum=3*Recursive(3) (6=3*2)

第九步:283行代码输出:i=3,sum=6

所以利用递归函数,实现阶乘的结果

相关文章

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

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

  • 递归函数的理解

    对于递归函数的理解,足足花了一天,从刚开始根本想不通为什么会倒过来输出,直到认识其中的原理。接下来,先简单地理解一...

  • 2018-10-28

    递归函数 标签(空格分隔): 重新理解一遍递归   首先,使用递归函数需要防止栈溢出。因为在计算机中函数的调用是通...

  • c++ day03

    函数的原型声明 理解函数参数的传值 哥德巴赫猜想验证 函数引用调用示例 函数的嵌套调用 函数递归 递归就是自己调用...

  • 最基本的递归组装树

    !!!!! 1.递归自调用理解的核心1-----大函数与小函数的同名变量互不影响 2.递归自调用理解的核心2---...

  • 怎么理解递归函数

    可参考:http://blog.csdn.net/vagrxie/article/details/8470798 ...

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

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

  • day11 函数(3)

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

  • 快速理解递归

    *数学归纳法理解 斐波那契数列 其他理解 写出递归函数也就是要处理好递归的3个主要的点:a)出口条件,即递归“什么...

  • 对递归函数的理解

    输入一个正整数N,输出从1到N的所有正整数: 1. 迭代的方式 2. 递归 刚开始不太理解,为什么分别在递归函数P...

网友评论

      本文标题:递归函数的理解

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