Python中的递归与while循环
def rec_naive(a,b):
while a>0:
b + rec_naive(a,b)
a=a-1
return b + rec_naive(a,b)
print rec_naive(5,2)
我不太确定自己哪里出错了,但我总是收到一个错误提示:最大递归深度超出。我不明白为什么这个while循环不管用,因为我给变量a设置了计数。
3 个回答
0
使用 while loop
(循环)是一种迭代
的方法来计算 5 * 2
,我想这就是你想要的结果。
这是在使用迭代的方法。
def iter_naive(a, b):
res = 0 # variable to add to each iteration
while a > 0:
res += b # add b each time through the loop
a -= 1 # decrement a by one each iteration
return res # return total
如果用 递归 的话,你需要一个基础情况:
def rec_naive(a, b):
a -= 1
if a == 0: # base case
return b # if a is equal to 0 we will stop and return the value of b
return b + rec_naive(a, b)
0
我尝试在每次调用 rec_naive(a,b)
之后检查 a
的值,使用了下面的代码:
def rec_naive(a,b):
while a>0:
print a
raw_input()
b + rec_naive(a,b)
a=a-1
return b + rec_naive(a,b)
print rec_naive(5,2)
我发现 a
的值一直是 5
,这意味着 a = a - 1
这个操作从来没有被执行过。你可以试试下面的代码:
def rec_naive(a,b):
if a ==0:
return 0
return b + rec_naive(a-1,b)
print rec_naive(5,2)
1
问题在于,尽管你试图通过循环来限制调用次数,但它无法通过第一次调用,因为第一次调用和起始条件是完全一样的。你可以试试下面这样的做法:
def rec_naive(a, b):
if a < 1:
return 0
return b + rec_naive(a - 1, b)