gpt4 book ai didi

python - python中for循环内的递归调用不会在预期的位置退出

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:07:42 25 4
gpt4 key购买 nike

我不明白为什么 for 循环内的递归函数不会在基本情况下退出函数。

我正在阅读 grokking 算法并尝试实现一个示例以供理解。

box = [
[["key"], []],
[[], []],
[[], []]
]
def find_key(box):
for item in box:
print(item)
if item == "key":
print("found")
return
elif type(item) == type([]):
print("looking in next box")
find_key(item)
find_key(box)

我希望一旦找到 key ,该函数就会退出,但它会继续查找列表的其余部分。

这也可能是我不了解 return 的作用,特别是与递归调用有关。我可以使用

获得预期的行为
import sys
def find_key(box):

for item in box:
if item == "key":
print("found")
sys.exit()
elif type(item) == type([]):
print("looking in next box")
find_key(item)

find_key(box)

最佳答案

您只是退出最后一个递归调用,而不是所有的递归调用。试试这个:

box = [
[["key"], []],
[[], []],
[[], []]
]

def find_key(box):
for item in box:
print(item)
if item == "key":
print("found")
return
elif type(item) == type([]):
print("looking in next box")
return find_key(item) # <-- add a `return`

find_key(box)
# [['key'], []]
# looking in next box
# ['key']
# looking in next box
# key
# found

顺便说一下,isinstance 比等同类型要好一点。您可以使用:

isinstance(item, list)

代替 type(item) == type([])

关于python - python中for循环内的递归调用不会在预期的位置退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54452682/

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