我需要写一个递归函数,打印2 ** n以及2 **(n-1)和2 **(n-2)等直到2 ** 0。目前输出为单个总和

时间:2015-02-03 00:42:32

标签: python python-2.7

def pow2(n):

    if n<=0:
        return 1
    else:
        return 2**n + pow2(n-1)

num = int(raw_input('Enter number: '))

print pow2(num)

目前输入3将输出15,这是8 + 4 + 2 + 1的总和。我想分别输出所有这些数字(仍然没有循环):1 2 4 8而不是15.我理解我当前的代码如何导致它的输出,但我不知道如何分离输出

2 个答案:

答案 0 :(得分:2)

def pow2(n):
    print 2**n
    if n<=0:
        return 1
    else:
        return 2**n + pow2(n-1)

如果你需要做的就是打印它......

如果您需要返回列表

def pow2(n):
    if n<=0:
        return [1]
    else:
        return [2**n] + pow2(n-1)

答案 1 :(得分:1)

以下是使用列表推导的方法:

def pow2(n):
    return([2**x for x in range(n+1)])

num = int(raw_input('Enter number: '))
for i in pow2(num):
    print(i)

或者那些东西。它在技术上不是递归的,但这样你只需要调用一次方法。

如果您需要先打印较大的数字,可以使用:

for i in sorted(pow2(num), reverse=True):
    print(i)