猿问

使用Python递归函数计算一个数的因数

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


qq_笑_17
浏览 414回答 2
2回答

海绵宝宝撒

在您的代码中,问题是方法内部的 for 循环。循环从第一个开始,进入第一个 if 条件,一切都在那里终止。这就是为什么它只打印 1 作为输出,这是您自己代码的稍微修改版本。这应该有帮助。如果您有任何疑问,请随时提出。def factors(x):&nbsp; &nbsp; if x == 1:&nbsp; &nbsp; &nbsp; &nbsp; print(1 ,end =" ")&nbsp; &nbsp; elif num % x == 0:&nbsp; &nbsp; &nbsp; &nbsp; factors(x-1)&nbsp; &nbsp; &nbsp; &nbsp; print(x, end =" ")&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; 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):&nbsp; &nbsp; count = 1 if N%F == 0 else 0&nbsp; &nbsp; if F == N : return count&nbsp; &nbsp; return count + NumFactors(N,F+1)&nbsp;您还可以优化它以一次计算两个因子直至 N 的平方根,并大大减少递归次数:def NumFactors(N,F=1):&nbsp; &nbsp; count = 1 if N%F == 0 else 0&nbsp; &nbsp; if N != F : count = count * 2&nbsp; &nbsp; if F*F >= N : return count&nbsp; &nbsp; return count + NumFactors(N,F+1)&nbsp;
随时随地看视频慕课网APP

相关分类

Python
我要回答