【问题标题】:Factors of a number using Python recursive function使用Python递归函数的数字因数
【发布时间】:2019-02-22 15:46:42
【问题描述】:

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

【问题讨论】:

  • 如果你发布你的输入和你得到的输出,你可能会帮助自己解决这个问题,然后你可以看到你的代码在做什么
  • 提示:您的print 调用期望NumFactors() 返回一个列表。但是你的代码没有建立一个列表。

标签: python recursion factors


【解决方案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)

【讨论】:

  • 非常感谢。感觉自己离得很近,只是错过了一些小的变化,这非常令人沮丧。快速添加到您的答案中,我的输出旨在在新行上显示每个数字。使用您的代码,它会在同一行显示所有内容,但我发现删除 end 语句有助于实现我所需要的
【解决方案2】:

由于这个问题已经快 3 年了,我只会给出答案,而不是要求朝着正确的方向推动:

    def factors (x,c=1):
        if c == x: return x
        else:
            if x%c == 0: print(c)
            return factors(x,c+1)

【讨论】:

    【解决方案3】:

    您的递归正在传递 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) 
    

    【讨论】:

      猜你喜欢
      • 2019-02-06
      • 1970-01-01
      • 2021-09-27
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多