Python while循环减法

时间:2017-04-25 17:35:25

标签: python loops while-loop

这是一个非常愚蠢的问题,但我暂时没有使用它,也不记得怎么做了。我正在做一个递归问题,需要显示倒计时的数字,以基本显示递归是如何工作的。但是,我似乎无法弄明白。这是我的代码。

def main():

    #have user input first number
    x = int(input('Enter the first number: '))

    #have user input second number
    y = int(input('Enter the second number: '))

    #calculate result by calling recursive function
    result = mult(x, y)

    #print the result
    print(x, 'times', y, 'is', result)

#define a function that uses recursion
def mult(x, y):
    # create a loop to display the numbers
    count = y
    while count > 0:
        print('First number =', x, 'Second number =', count)
        count -= 1
    #use recursion to multiply the numbers
    if x == 0:
        return 0
    elif x == 1:
        return y
    else:
        return y + mult(x - 1, y)

main()

我需要输出来说明这一点:

Enter the first number: 5
Enter the second number: 7
First number = 5 Second Number = 7
First number = 5 Second Number = 6
First number = 5 Second Number = 5
First number = 5 Second Number = 4
First number = 5 Second Number = 3
First number = 5 Second Number = 2
First number = 5 Second Number = 1
5 times 7 = 35

所以它在大多数情况下都有效,但是现在它显示了这个:

Enter the first number: 5
Enter the second number: 7
First number = 5 Second number = 7
First number = 5 Second number = 6
First number = 5 Second number = 5
First number = 5 Second number = 4
First number = 5 Second number = 3
First number = 5 Second number = 2
First number = 5 Second number = 1
First number = 4 Second number = 7
First number = 4 Second number = 6
First number = 4 Second number = 5
First number = 4 Second number = 4
First number = 4 Second number = 3
First number = 4 Second number = 2
First number = 4 Second number = 1
First number = 3 Second number = 7
First number = 3 Second number = 6
First number = 3 Second number = 5
First number = 3 Second number = 4
First number = 3 Second number = 3
First number = 3 Second number = 2
First number = 3 Second number = 1
First number = 2 Second number = 7
First number = 2 Second number = 6
First number = 2 Second number = 5
First number = 2 Second number = 4
First number = 2 Second number = 3
First number = 2 Second number = 2
First number = 2 Second number = 1
First number = 1 Second number = 7
First number = 1 Second number = 6
First number = 1 Second number = 5
First number = 1 Second number = 4
First number = 1 Second number = 3
First number = 1 Second number = 2
First number = 1 Second number = 1
5 times 7 is 35

5 个答案:

答案 0 :(得分:2)

打印这两个数字的关键是跟踪递归。所以很自然地,数字必须从里面递归函数打印出来。换句话说,您不希望创建一个额外的循环(使用while)来显示数字,但递归循环。

您还只想在每次递归步骤中打印一次数字。

可能另外让您感到困惑的是,您已在所需输出和递归的参数顺序之间交换了“first”/ x和“second”/ y的角色。 (您希望输出中的“秒”数减少,但是减少x第一个参数(mult)。)

它应该是这样的:

def mult(x, y):
    """Calculate x * y by using recursion."""
    print('First number =', x, 'Second number =', y)
    if y == 0:
        return 0
    elif y == 1:
        return x
    else:
        return x + mult(x, y - 1)

if __name__ == '__main__':
    x = int(input('Enter the first number: '))
    y = int(input('Enter the second number: '))

    # calculate result by calling recursive function
    result = mult(x, y)

    # print the result
    print(x, 'times', y, 'is', result)

答案 1 :(得分:0)

我认为您没有存储修改后的y值。因此,while循环应该如下所示:

y_temp = y
while y_temp > 0:
    print('First number =', x, 'Second number =', y_temp)
    y_temp -= 1

答案 2 :(得分:0)

只需进行一项小改动,您需要更新ywhile loop的值。

#create a loop to display the numbers
while y > 0:
    print('First number =', x, 'Second number =', y)
    y -= 1

答案 3 :(得分:0)

您的while循环不在递归调用之内,因此y的值不会更新。将print语句移到mult函数内,位于if语句上方。

def mult(x, y):
    print('First number =', x, 'Second number =', y)
    print('First number =', x, 'Second number =', y - 1)
    if x == 0:
        return 0
    elif x == 1:
        return y
    else:
        return y + mult(x - 1, y)

答案 4 :(得分:-1)

您忘记更新y,但您没有减少y