这是一个非常愚蠢的问题,但我暂时没有使用它,也不记得怎么做了。我正在做一个递归问题,需要显示倒计时的数字,以基本显示递归是如何工作的。但是,我似乎无法弄明白。这是我的代码。
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
答案 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)
只需进行一项小改动,您需要更新y
中while 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
。