为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_笑_17 2021-11-16 16:37:06
我有一个作业要求我使用 Python 递归函数以如下形式输出用户输入数字的因子:输入一个整数:6 <--用户输入6的因数是:1236我现在感觉有点迷茫,在过去的 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))
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

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


查看完整回答
反对 回复 2021-11-16
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

您的递归向下传递 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) 


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 413 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信