使用 Python 递归函数的数字因子
Factors of a number using Python recursive function
我有一个作业要求我使用 Python 递归函数以下面的形式输出用户输入数字的因子:
输入一个整数:6 <-- 用户输入
6的因数是:
1
2
3
6
我现在感觉有点迷茫,在过去的 2 个小时里,我尝试过自己做所有事情,但就是做不到。如果可能的话,我宁愿被推向正确的方向,也不愿显示我的代码需要更改的地方,因为我想学习
下面是我的代码:
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))
您的递归向下传递 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)
在您的代码中,问题在于方法内的 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)
由于这个问题已经快 3 年了,我将只给出答案而不是按正确方向推动的要求:
def factors (x,c=1):
if c == x: return x
else:
if x%c == 0: print(c)
return factors(x,c+1)
我有一个作业要求我使用 Python 递归函数以下面的形式输出用户输入数字的因子:
输入一个整数:6 <-- 用户输入
6的因数是:
1
2
3
6
我现在感觉有点迷茫,在过去的 2 个小时里,我尝试过自己做所有事情,但就是做不到。如果可能的话,我宁愿被推向正确的方向,也不愿显示我的代码需要更改的地方,因为我想学习
下面是我的代码:
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))
您的递归向下传递 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)
在您的代码中,问题在于方法内的 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)
由于这个问题已经快 3 年了,我将只给出答案而不是按正确方向推动的要求:
def factors (x,c=1):
if c == x: return x
else:
if x%c == 0: print(c)
return factors(x,c+1)