函数的尾递归

时间:2019-11-07 01:03:23

标签: python recursion tail-recursion

我有一个提供递归功能的作业问题,必须使用尾递归来实现。该功能是
f(0)= 1
f(n)= 1 + 2 * f(n-1)

我不是最擅长的尾递归,我尝试查找示例,但是我发现的都是带有斐波那契数列的示例,它并没有太大帮助。

我真正拥有的只是

def f(n,s=1):
    if n == 0:
        return s
    else:
        return f(n-1, "i dont know what to put here")

我知道尾部递归基本上是通过每次调用来计算函数的,我只是不知道如何实现它。
编辑:我做了错别字f(n)应该是1 + 2 * f(n-1)

1 个答案:

答案 0 :(得分:1)

对于尾部递归,您可以随时跟踪总和:

$ cat foo.py 
import sys

def f(n,s=1):
    if n == 0:
        return s
    return f(n-1, 1+2*s)

r = int(sys.argv[1])
print(f(r))

输出:

$ seq 0 10 | xargs -I% python foo.py %
1
3
7
15
31
63
127
255
511
1023
2047