Python 学习手册中递归求和代码的运行为什么打印每次递归的对象

2023-01-23 09:17:47 +08:00
 googlai

下面是 jupyter 里的代码,除了第 1 个小例子要求每次递归调用都打印出对象外,其余函数都没有要求打印的代码逻辑呀,但是运行的结果是每次打印递归对象,除了最后一个间接递归,其他直接递归调用的结果我有点不理解,有没有懂得 V 友劳烦解个惑,先行谢过。

def mysum(L):
    print(L)
    if not L:
        return 0
    else:
        return L[0] + mysum(L[1:])
    
mysum([1, 2, 3, 4, 5])
[1, 2, 3, 4, 5]
[2, 3, 4, 5]
[3, 4, 5]
[4, 5]
[5]
[]





15
def mysum1(L):
    return L[0] if len(L)==1 else L[0] + mysum(L[1:])
mysum1([1, 2, 3, 4, 5])
[2, 3, 4, 5]
[3, 4, 5]
[4, 5]
[5]
[]





15
def mysum2(X):
    first, *rest = X
    return first if not rest else first + mysum(rest)
mysum2([1, 2, 3, 4, 99])
[2, 3, 4, 99]
[3, 4, 99]
[4, 99]
[99]
[]





109
def mysum3(Y):
    if not Y: return 0
    return noempty(Y)

def noempty(Y):
    return Y[0] + mysum3(Y[1:])
mysum3([5, 2, 3, 4, 99])
113
2029 次点击
所在节点    Python
3 条回复
xiri
2023-01-23 09:22:25 +08:00
你的 mysum1 和 mysum2 里面不是都调用了 mysum 嘛? mysum 里面有打印啊,,,
googlai
2023-01-23 09:30:21 +08:00
@xiri 原来是我自己书写错误,非常感谢指正。
stephenyin
2023-01-23 11:06:35 +08:00
@googlai #2 -_-||

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/910314

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX