Python的递归和while循环

时间:2014-06-10 22:34:01

标签: python recursion while-loop

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 :(得分:1)

问题是即使你试图用循环限制调用,它也不能通过第一次调用,因为它与起始条件完全相同。试试这样的事情

def rec_naive(a, b):
    if a < 1:
        return 0
    return b + rec_naive(a - 1, b)

答案 1 :(得分:0)

我尝试使用以下代码在每次调用a后检查rec_naive(a,b)的值:

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)

答案 2 :(得分:0)

使用while loopiterative方式乘以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 

使用recursion您需要一个基本案例:

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)