gpt4 book ai didi

python - 双递归教育示例

转载 作者:太空狗 更新时间:2023-10-30 00:55:08 24 4
gpt4 key购买 nike

这个功能对我来说毫无意义。我到处都添加了打印语句来弄清楚发生了什么,但我还是不明白。如果有人能向我解释一下,我将不胜感激。

def f(s):
if len(s) <= 1:
return s
return f(f(s[1:])) + s[0]

print(f("mat"))

这就是我看到的情况。所以我们从长度为 3 的字符串开始并绕过 if 语句。我们首先处理 f(s[1:]) 的内部。所以现在我们有一个长度为 2 ("at") 的字符串,它再次绕过 if 语句并进入 f(s[1]),这给我们提供了长度为 1 ("t") 的字符串,它最终进入 if 语句并返回“t”。对我来说,这就是线索变得冷淡的地方。

从我的打印语句中,我看到创建了一个长度为 2 的新字符串,并返回了后续的“a”。最终产品最终成为“atm”。由于“+ s[0]”部分,我在最后标记了“m”,但为什么它是“atm”而不是“tam”?

老实说,我已经在这上面花了几个小时,但没法让它下雨。任何帮助将不胜感激。

最佳答案

通过在函数调用中填写他们正在做的事情,将整个事情展开成很长的步骤。首先处理最深/最嵌入的括号。在添加之前处理函数调用。

为了清楚起见,我将忽略各处的字符串引号。

f(mat)           -> mat is 3 chars:
call f on at for f(at), and call f on that.
add m.

f(f(at))+m -> inner f(at), at is 2 chars:
call f on t for f(t), and call f on that.
add a.

f(f(f(t))+a)+m -> innermost f(t) returns t.

f(f(t)+a)+m -> inner f(t) returns t as well.

f(ta)+m -> [here, the first f(f(at)) has been reduced to f(ta)]
ta is 2 chars:
call f on a for f(a), and call f on that.
add t.

f(f(a))+t+m -> inner f(a) returns a.

f(a)+t+m -> f(a) returns a as well.

a + t + m ->

atm -> everything reduces to atm.

关于python - 双递归教育示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30947216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com