059 递归函数
一、什么是递归函数
所谓递归函数。它的本质依然是函数。不过加了递归二字,将函数递归调用。
递:递推,归:回归,回溯。
记住:无论什么的样的递归函数,它一定是满足递推,和回溯两个条件。递归函数从根本上来说更多的是一种思想。
二、函数的递归调用
递归函数,它是一种特殊的嵌套调用,但是它在调用一个函数的过程中,又直接或间接地调用了它自身。另外,递归函数一定要设置终止调用的条件,使得函数的执行次数是有穷的。而不是死循环下去,这是非常关键的。
递归必须要有两个明确的阶段:
- 递推:一层一层递归调用下去,进入下一层递归的问题规模都将会减小
- 回溯:递归必须要有一个明确的结束条件,在满足该条件开始一层一层回溯。
递归的精髓在于通过不断地重复逼近一个最终的结果。
例:使用函数递归的方式编写一个求和函数。
def sun(num): # 求和函数
if num > 1:
return num + sun(num-1)
else:
return num
print(sun(100))
分析:上述的递归求和函数,是函数递归思想中非常常见的例子。也是比较容易理解函数递归思想的例子。
首先。通过if num > 1
作为递归终止的条件。
当满足条件时:函数会在return之前。不断地递推执行sun(num-1)
不断地去减小值,缩小规模。
当不满足条件时:函数会开始回溯。首先执行else
并将结果num值,返回给上层递归调用的函数中sun(num-1)
,此时函数已经在不断地回溯。而每次回溯的结果都将是num + sun(num-1)
计算的结果进行返回给上层函数,直到回溯完毕。
结论:因此,我们可以看出递归函数也是非常占用内存资源的。因为每一次调用,Python解释器都需要为该函数创建内存空间,而递归的规模越大,内存占用越多,对计算机性能也就有了考验。所以,递归函数一定要设置终止条件。要让函数有穷别让程序把你的内存吃完。
总结
综上所述,函数递归除了是一直方式。更多的是一种编程的思想。不断地去逼近结果,满足条件。
说了半天。就一句话。递归函数一定要合理的设置终止条件,因为没有终止条件的死递归是非常恐怖的。