使用 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)