如何在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循环如果可能的话。

+1

没有使用您的要求for循环吗?你没有说清楚。另外,你能否按照所显示的顺序返回一个列表;即'[f(0),f(1),...,f(x)]'?这会更有意义,并且接近动态编程或记忆。 –

+0

我试图避免for循环,因为我已经注意到我使用它们“太多”,即使没有必要。 是的,相反的顺序是罚款。 – amarsh

+1

@amarsh我不明白你对for-loop的评论。仅供参考,for循环通常比递归效率更高,因此更受欢迎。有时递归是可以的,也许你对时间不敏感。你陈述的理由 - 你经常使用for循环 - 没有任何意义。 – Brick

您可以返回一个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)