Think Python Exercise 5.4

下面程序的输出是什么?画出展示程序每次打印输出时的堆栈图。

1
2
3
4
5
6
7
def recurse(n, s):
    if n == 0:
        print(s)
    else:
        recurse(n-1, n+s)

recurse(3, 0)
  1. 如果你这样调用函数: recurse(-1,0) ,会有什么结果?
  2. 请写一个文档字符串,解释调用该函数时需要了解的全部信息(仅此而已)。

解答:

我用obsidian的Excalidraw插件画了一个。

如果这样调用函数: recurse(-1,0),Python会抛出一个递归错误:超过最大递归深度。

>>> recurse(-1,0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in recurse
  File "<stdin>", line 5, in recurse
  File "<stdin>", line 5, in recurse
  [Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded

写一个文档字符串,解释调用该函数时需要了解的全部信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def recurse(n, s):
    """将s与前n个正整数(从1到n)相加,
    n是一个正整数,
    s可以是任意数字
    """
    if n == 0:
        print(s)
    else:
        recurse(n-1, n+s)

recurse(3, -5)