我有以下功能:
def lst(*l):
if l==():return None
else: return cons(l[0],lst(l[1:]))
当我运行它时,我得到“在比较中超过了最大递归深度”.奇怪的是,当我添加将参数元组转换为列表的整形器时,一切正常:
def lst(*l):
return _lst(list(l))
def _lst(l):
if l==[]:return None
else: return (l[0],_lst(l[1:]))
>>> lst(1,2)
(1, (2, None))
这是什么问题,如何处理这种奇怪的行为?
解决方法:
您再次将参数传递给函数时缺少*
def lst(*l):
if l==():return None
else: return cons(l[0],lst(*l[1:]))
您将空元组作为第一个位置参数传递,这意味着在下一个递归中,l实际上应等于((),)(一个包含一个空元组的元组),当它应为()时