我有一个赋值,要求我使用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))
在您的代码中,问题是方法内部的for循环。循环从1开始并转到第一个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)
你的递归向下传递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)