如何在Python中返回每个递归函数调用?
问题描述:
我使用的可能不是正确的术语,但我相当新的编程(所以请原谅我,如果这是一个简单的搜索,我不知道如果我使用的是正确的关键字)。如何在Python中返回每个递归函数调用?
比方说,我有一个递推关系:
F(0)= 2
F(X)= F(X-1)+ 1对于x> = 1
现在让我们说,我想用递归这种关系在Python(2.7)计划,但不是只返回F(X),我想返回一个列表:F(X),F(X-1),... ,f(0)]。
我可以很容易编程的递推关系返回F(10):
def my_fun(x):
if x == 0:
return 2
else:
return 1+my_fun(x-1)
不过,我不知所措,如何返回每个函数调用,而无需使用一个for循环。
有没有办法做到这一点?
编辑:我想避免使用for循环如果可能的话。
答
您可以返回一个list
和使用的最后一个元素的先前调用计算值。
def my_fun(x):
if x == 0:
return [2]
else:
l = my_fun(x-1)
l.append(l[-1] + 1) # since f(n-1) is in the last element
return l
a = my_fun(5)
print(a)
没有使用您的要求for循环吗?你没有说清楚。另外,你能否按照所显示的顺序返回一个列表;即'[f(0),f(1),...,f(x)]'?这会更有意义,并且接近动态编程或记忆。 –
我试图避免for循环,因为我已经注意到我使用它们“太多”,即使没有必要。 是的,相反的顺序是罚款。 – amarsh
@amarsh我不明白你对for-loop的评论。仅供参考,for循环通常比递归效率更高,因此更受欢迎。有时递归是可以的,也许你对时间不敏感。你陈述的理由 - 你经常使用for循环 - 没有任何意义。 – Brick