文件名称:无限递归-三菱数控指导手册api
文件大小:1.91MB
文件格式:PDF
更新时间:2024-07-03 00:32:24
python
52 第五章 条件和递归
__main__
countdown
countdown
countdown
countdown
n 3
n 2
n 1
n 0
图 5.1: 堆栈图。
每当一个函数被调用时,Python生成一个新的栈帧,用于保存函数的局部变量和形参。
对于一个递归函数,在堆栈上可能同时有多个栈帧。
图 5.1展示了一个以 n = 3调用 countdown的堆栈图。
通常,堆栈的顶部是 __main__栈帧。因为我们在 __main__中没有创建任何变量,也没有
传递任何实参给它,所以它是空的。
对于形参 n,四个 countdown栈帧有不同的值。n=0的栈底,被称作基础情形 (base case)
。它不再进行递归调用了,所以没有更多的栈帧了。
接下来练习一下,请画一个以 s = 'Hello'和 n=2调用 print_n的堆栈图。写一个名为 do_n
的函数,接受一个函数对象和一个数 n作为实参,能够调用指定的函数 n次。
5.10 无限递归
如果一个递归永不会到达基础情形,它将永远进行递归调用,并且程序永远不会终止。
这被称作无限递归 (infinite recursion),通常这不是一个好主意。下面是一个最简单的
无限递归程序:�
def recurse ():
recurse () �
在大多数编程环境里,一个具有无限递归的程序并非永远不会终止。当达到最大递归深
度时,Python会报告一个错误信息:�
File "