【发布时间】:2021-01-29 10:01:04
【问题描述】:
在 python 中是否有使用阴影以使这段代码不会永远循环?
这里,ret 是一个变量而不仅仅是一个绑定,导致无限递归
class Node(object):
def __init__(self, value, next=None):
self.value = value
self.next = next
def list2LinkedListFoldrImp(nums):
ret = lambda x:x
for num in nums:
ret = lambda rs: ret(Node(num,rs)) # RecursionError: maximum recursion depth exceeded
return ret(None)
print(list2LinkedListFoldrImp([5,4,1]))
【问题讨论】:
-
将链表[5,4,1]转化为链表Node(5,Node(4,Node(1,None)))
-
数据结构是递归的,所以你确实需要某种形式的递归。想想
i = i + 1,你不会期望它永远递归。这是相同的,除了功能值ret。这是一个简化的例子,尽管是人为的例子 -
我确实希望像使用任何其他值一样使用函数,尽可能不依赖巧妙的技巧。
-
我看不出这有什么关系
-
这个简单代码中突出显示的问题是递归构建一个函数
ret,其工作是将列表转换为链表...这只是最简单的示例能想到。
标签: python recursion shadowing