Python代码输出结果的原因

时间:2017-05-23 10:46:47

标签: python-3.x

为什么while循环在打印pascal三角形时执行的次数超过预期? 每次执行while循环时,x增加1,而n保持不变 我刚开始学习python 请帮忙

memo = {0:1}
def fac(n):
    if n not in memo:
        memo[n] = n*fac(n-1)
        return memo[n]
    else:
        return memo[n]

def pascal(x, space):
    while(x <= n):
        for j in range(space):
            print(" ", end = "")
        for i in range(0, x+1):
            print ( int(fac(x)/(fac(i)*fac(x-i))), end = " " )
        print("\n", end = "")
        x += 1
        space -= 1
        pascal(x, space)

n = eval(input())
space = n
x = 0
pascal(x, space)

1 个答案:

答案 0 :(得分:0)

您正在使用两种方法来迭代pascal函数中的数字,while循环和递归调用。你只需要其中一个。

保持while循环:

def pascal(x, space):
    while(x <= n):
        for j in range(space):
            print(" ", end = "")
        for i in range(0, x+1):
            print ( int(fac(x)/(fac(i)*fac(x-i))), end = " " )
        print("\n", end = "")
        x += 1
        space -= 1

保持递归通话,将while变为if

def pascal(x, space):
    if(x <= n):
        for j in range(space):
            print(" ", end = "")
        for i in range(0, x+1):
            print ( int(fac(x)/(fac(i)*fac(x-i))), end = " " )
        print("\n", end = "")
        x += 1
        space -= 1
        pascal(x, space)

给定3作为输入,两个版本打印以下内容:

   1
  1 1
 1 2 1
1 3 3 1