Python中的递归与while循环

-3 投票
3 回答
765 浏览
提问于 2025-04-18 09:21
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)

撰写回答