我正在学习尾递归,不明白这个例子的流程。 我正在使用 VSCode 调试器,不明白为什么当程序到达
return[f(arg), *result]
时,它会转到 result = my_map(f, rest)
行,并且 arg
变成 2
def my_map(f, iterable):
try:
arg, *rest = iterable
except ValueError:
return []
result = my_map(f, rest)
return[f(arg), *result]
print(my_map(lambda x: x+10, [1,2,3]))
我不习惯解包运算符(*),所以也许我在那里遗漏了一些东西。
由于
arg
是 3
并且 result
是 []
,我只是期待 return
返回像 [3,[]]
这样的列表。
标题已编辑:它不是尾递归,因为递归不是函数所做的最后一件事。-谢谢 > https://stackoverflow.com/users/1491895/barmar
编辑:关于我不明白的内容的更多解释: 首先,我得到所有内容,直到结果变成空列表。 然后,我们进入 return [f(arg),*result] 我不明白为什么执行(从调试器中看到)返回到上一行(结果)。因此,如果有人可以向我解释从那时起发生了什么......
为了理解流程,我首先观看这个关于递归的理想视频https://www.youtube.com/watch?v=AfBqVVKg4GE 然后我就明白了,这根本不是一个理解递归的好例子……
因此,基于此,我以与视频中相同的方式绘制了调用堆栈状态图。 希望有帮助