2017-05-08 118 views
-2

我工作的一系列项目的功课,这也是设置的挑战之一:为什么我的阶乘循环没有结束?

阶乘查找

正整数的阶乘,正,被定义为产品 序列n,n-1,n-2,... 1和零的阶乘0是 定义为1.

使用循环和递归来解决这个问题。

num = input("Type number: ") 
num1 = str(float(num) - float(1)) 
fnum = float(num) * float(num1) 
while (num1 != 1): 
    num1 = str(float(num) - float(1)) 
    fnum = float(num) * float(num1) 
else: 
    print(fnum)" 

但是,当涉及到运行的代码,你输入一个号码和程序输出什么,它只是坐在那里。我该如何解决这个问题?

回答

2

num1 != 1永远不会是错误的,因为num1字符串。你也从num减去1本身从不改变,所以你永远不会达到1这种方式要么;如果num从5开始,那么num1永远是4

除此之外,你也永远不会乘以前面的fnum值,而是用num * num1结果代替fnum每次迭代。如果你的循环工作正常,你最终会得到num * 1,这是错误的答案。

我不确定你为什么使用字符串,只是把它作为一个数字。如果您坚持使用float值,请考虑可能存在精度问题;更好地检查数字等于或更小的数字。从num1减1,倒数。每次都不需要将所有内容都转换为float();一旦你有一个浮点数,坚持认为:

num = float(num) 
num1 = num - 1 
fnum = num * num1 
while num1 > 1: 
    num1 = num1 - 1 
    fnum = fnum * num1 

你的任务告诉你使用整数但是。上面现在可以方便地转换到使用整数代替:

num = int(num) 
num1 = num - 1 
fnum = num * num1 
while num1 > 1: 
    num1 = num1 - 1 
    fnum = fnum * num1 

最后,我只是用一个for循环在range()。不要紧,如果你使用n * n - 1 * n - 2 * ... * 11 * ... * n - 2 * n - 1 * n;结果是一样的:

num = int(num) 
fnum = 1 
for i in range(2, num + 1): 
    fnum = fnum * i 
0

这不起作用,因为num永远不会递减。如果num为5,那么在while循环中,num1将始终为4.同样,fnum将始终为20.

如果您需要一个像5 x 4 x 3 x 2 x 1的模式,则需要实际减少num一个在while循环中。

另外,为什么你把所有东西都变成一个字符串?如果num1是一个字符串,你的while循环甚至不会开始。