我有一个作业,要求我使用Python递归函数以以下形式输出用户输入数字的因数:
输入整数:6 <-用户输入
6的因数是:
1
2
3
6
我现在有点迷失了方向,过去两个小时都尝试自己做所有事情,但根本无法到达目的地。如果可能的话,我宁愿朝着正确的方向前进,而不是在需要学习我的代码的地方显示
下面是我的代码:
def NumFactors(x):
for i in range(1, x + 1):
if x == 1:
return 1
if x % i == 0:
return i
return NumFactors(x-1)
x = int(input('Enter an integer: '))
print('The factors of', x, 'are: ', NumFactors(x))
答案 0 :(得分:0)
您的递归沿x-1传递,这不会为您提供正确的值。例如:无法从5中的因子数获得6中的因子数。
我假设您不是在寻找素数的数目,而是在寻找与两个数相乘的因数。
这通常不需要递归,因此您可以确定任何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)
答案 1 :(得分:0)
在您的代码中,问题出在方法内部的for循环上。循环从一个开始,如果条件终止,则循环到第一个,一切都在那里终止。这就是为什么它只输出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)