创造2' *'的递归能力在python中

时间:2014-12-11 03:32:27

标签: python

在pyschools,我被困在2递归函数的力量

    >>> createStars(0)      # 2 to power of 0 = 1
    '*'
    >>> createStars(1)      # 2 to power of 1 = 2
    '**'
    >>> createStars(2)      # 2 to power of 2 = 4
    '****'
    >>> createStars(3)      # 2 to power of 3 = 8
    '********'

我想做的是:


def createStars(x):
    if x == 0:
        return '*'
    else:
        return '*' * x + createStars(x-1) 

然而,这似乎是'x'不是2的幂的总和。 意思是,当x高于2

时,这将会中断

我知道如何以递归方式执行2的强大功能但不知道在哪里更改以使createStars()有效。

def power(x, n):
    if n == 0:
        return 1
    else:
        return x * power(x, n-1)

PS。我知道很容易使用非递归方法来解决它。     但是想以递归的方式寻求建议。

感谢。

2 个答案:

答案 0 :(得分:1)

def createStars(x):
    if x == 0:
        return '*'
    else:
        return createStars(x-1) * 2

(递归中的每一步都会使输出字符串中的星数加倍。)

答案 1 :(得分:1)

你非常接近!

我建议比较你给我们的两段代码。 (我将重命名它以使类比更清晰):

def createStars(n):
    if n == 0:
        return '*'
    else:
        return '*' * n + createStars(n-1) 


def power(x, n):
    if n == 0:
        return 1
    else:
        return x * power(x, n-1)

他们几乎完全相同的结构。特别是,每个的最后一行结构略有不同。

在(工作)权力中,您将n-1的结果乘以x。因此,当计算功率(2,6)时,你将功率(2,5)增加2.(即你 32乘以2得到64)。

在(不工作)createStars中,你没有将n-1个案的结果乘以任何东西;你只是在它的开头添加东西。如果你改变它以使结构匹配怎么办?

此外,您应该检查createStars(1)的结果。