我有一个递归问题。 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)
答案 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)