【发布时间】:2021-10-28 20:47:29
【问题描述】:
我很想以递归方式将数组中的值相乘,但运行以下代码后出现错误:
def multAll(k,A) :
multAllRec(k,A,0)
def multAllRec(k,A,i) :
if i<len(A):
A[i] *= k
multAllRec(k, A, i + 1)
multAll(10,[5,12,31,7,25])
错误:RecursionError:调用 Python 对象时超出最大递归深度
【问题讨论】:
-
您需要添加一个基本案例才能在某个时候返回。
multAllRec的每次调用都保证会再次调用自身,因此您将始终达到极限。看起来你想要类似if i >= len(A): return的东西 -
顺便说一句,你可以通过给
i一个默认值来组合这两个功能。 -
您正面临堆栈溢出(如论坛名称)。正如洛克所说,您正在递归调用函数
multAllRec而没有返回,这就是导致错误的原因。 -
谢谢,我修改了函数,使其包含
def multAll(k,A): return multAllRec(k,A,0) def multAllRec(k,A,i): if i >= len(A): return A -
因为
multAllRec()无条件地调用自己。这需要有条件地完成才能停止这样做。