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

时间:2019-02-22 15:46:42

标签: python recursion factors

我有一个作业,要求我使用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))

2 个答案:

答案 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)