我有一个提供递归功能的作业问题,必须使用尾递归来实现。该功能是
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)
答案 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