递归:未创建for中每个元素的多个函数实例

时间:2015-04-24 14:07:58

标签: python recursion tail-recursion

我有一个递归问题。 http://www.geeksforgeeks.org/print-increasing-sequences-length-k-first-n-natural-numbers/ 但我看到函数的递归调用没有发生。 下面的代码会出现什么问题:

tblTotalPointsLife

输出:123

def wrapper(n,k):
    list=[]
    for i in range(1,n+1):
        list.append(str(i))

    print rec_seq(list,k,0,'')

def rec_seq(list,k,i,prefix):
    #base case
    if k==0:
        return prefix

    else:
        for c in list[i:None]:
            newPrefix=prefix+c
            return rec_seq(list,k-1,i+1,newPrefix)

if __name__=='__main__':
    wrapper (5,3)

2 个答案:

答案 0 :(得分:0)

for循环中,如果您使用return,则只会返回该奇异值。在你的情况下,这就是它的样子。

首先致电rec_seq

for c in list[i:None]: #i=0, c='1'
    newPrefix=prefix+c #newPrefix = '' + '1'
    return rec_seq(list,k-1,i+1,newPrefix) #k-1 = 2, i+1 = 1

第二次电话

for c in list[i:None]: #i=1, c='2'
    newPrefix=prefix+c #newPrefix = '1' + '2'
    return rec_seq(list,k-1,i+1,newPrefix) #k-1 = 1, i+1 = 2

第三次电话

for c in list[i:None]: #i=2, c='3'
    newPrefix=prefix+c #newPrefix = '12' + '3'
    return rec_seq(list,k-1,i+1,newPrefix) #k-1 = 0, i+1 = 3

上次致电

if k==0: #True
    return prefix #prefix = '123'

所以回到链上,Last呼叫将'123'传递给第三个呼叫,它将其传递给第二个呼叫,一直回到原始呼叫,返回'123'

答案 1 :(得分:0)

def wrapper(n,k):
    list=[]
    for i in range(1,n+1):
        list.append(str(i))

    rec_seq(list,k,0,'')

def rec_seq(list,k,i,prefix):
    #base case
    if k==0:
        print prefix
        return 

    else:
        for c in list[i:None]:
            if prefix=='':
                newPrefix=prefix+c
                rec_seq(list,k-1,i+1,newPrefix)
            else:
                if int(c)>int(prefix[-1]):
                    newPrefix=prefix+c
                    rec_seq(list,k-1,i+1,newPrefix)
        return    

if __name__=='__main__':
    wrapper (5,3)

enter image description here