使用Python递归函数的数字因素

问题描述 投票:2回答:2

我有一个赋值,要求我使用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))
python recursion factors
2个回答
0
投票

在您的代码中,问题是方法内部的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)

0
投票

你的递归向下传递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) 
© www.soinside.com 2019 - 2024. All rights reserved.