2 回答

TA贡献1809条经验 获得超8个赞
在您的代码中,问题是方法内部的 for 循环。循环从第一个开始,进入第一个 if 条件,一切都在那里终止。这就是为什么它只打印 1 作为输出,这是您自己代码的稍微修改版本。这应该有帮助。如果您有任何疑问,请随时提出。
def factors(x):
if x == 1:
print(1 ,end =" ")
elif num % x == 0:
factors(x-1)
print(x, end =" ")
else:
factors(x-1)
x = num = int(input('Enter an integer: '))
print('The factors of', x, 'are: ',end =" ")
factors(x)

TA贡献1804条经验 获得超8个赞
您的递归向下传递 x-1,这不会给您正确的值。例如:6 的因数个数不能从 5 的因数个数求出。
我假设您不是在寻找质因数的数量,而只是在寻找与两个数字相乘相对应的因数。
这通常不需要递归,因此您可以决定任何 F(n) = F(n-1) 模式。例如,您可以使用当前因子作为查找下一个因子的起点:
def NumFactors(N,F=1):
count = 1 if N%F == 0 else 0
if F == N : return count
return count + NumFactors(N,F+1)
您还可以优化它以一次计算两个因子直至 N 的平方根,并大大减少递归次数:
def NumFactors(N,F=1):
count = 1 if N%F == 0 else 0
if N != F : count = count * 2
if F*F >= N : return count
return count + NumFactors(N,F+1)
添加回答
举报