1、理解递归函数的前置知识
本人初次接触程序关于如何理解和运用递归函数也卡了好长一段时间,关于理解他首先要理解几个要点:
一、函数调用的原理要懂得
二、程序的执行顺序执行流程要清楚,然后一步步结合程序调用函数的原理分析其中的递推和回归过程
2 、关于递归函数调用占用资源大的问题的原理解释
记住函数调用传递的是值传递,调用了一个函数,把一个值传递过去让其他函数(此函数可以又是其自身,即递归函数就是一个一般函数的一个特殊函数,调用其自身)处理,此函数就要另外临时开辟相关存储资源来处理被调用者丢过来的参数,所以递归调用在数量级别大的话要占用大量资源就不难理解了。当递归调用达到截至条件时候程序就执行当前递归函数所在的函数(暂且称之为父函数)剩余的程序语句(如打印、输出、等其他处理要求)。
3、关于递归函数到达截至条件时层层进去及反出的理解
要执行当前值和操作,就要知道下一个值,要知道下一个值就要知道下下个值....一直依次类推(在条件未达到时),最终有个截止条件的值是知道的。
当程序执行到递归截至条件的那一步时候,则第一次执行当前程序(每递推进去一次,会有新的程序块,有新的变量)剩下的其他操作。然后后面一层还处于等待获取变量的状态,当它前面的一层已经获取了值了,那本层值也知晓了,那它就要执行它本次剩下的其他操作,后续同理......
例:
fact(n)
用递归:
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
如果我们计算fact(5)
,可以根据函数定义看到计算过程如下:
===> fact(5)
===> 5 * fact(4)
===> 5 * (4 * fact(3))
===> 5 * (4 * (3 * fact(2)))
===> 5 * (4 * (3 * (2 * fact(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
===> 5 * 24
===> 120