函数的尾递归

问题描述 投票:0回答:3

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

python recursion tail-recursion
3个回答
0
投票

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

$ 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

-1
投票

尾递归只是一个递归函数,仅在函数末尾调用自身,因此根据函数的规格,它应该类似于:

def f(n):
    if n == 0:
        return 1
    return 1 + f(n - 1)

-1
投票

它可以很简单:

def f(n):
    return 1 if n==0 else 1 + 2*f(n-1)
© www.soinside.com 2019 - 2024. All rights reserved.