首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有一种方法可以让这种反向阶乘代码更高效地运行?

有没有一种方法可以让这种反向阶乘代码更高效地运行?
EN

Stack Overflow用户
提问于 2020-02-14 04:50:38
回答 4查看 211关注 0票数 1

我刚刚开始学习python,并编写了一个程序,它根据阶乘计算阶乘数。

例如,如果我给程序一个数字120,它会告诉我它的阶乘是5

无论如何,我的问题是如何让这段代码更高效、更快。

代码语言:javascript
复制
Num = int(input())
i=0

for i in range(0,Num):
  i = i + 1
  x = Num/i
  Num = x
  if (x==1):
      print(i)
EN

回答 4

Stack Overflow用户

发布于 2020-02-14 05:26:45

乘法比除法快得多。你应该尝试用阶乘来达到这个数字,而不是迭代地除以它:

代码语言:javascript
复制
def unfactorial(n):
    f,i = 1,1
    while f < n:
        i += 1
        f *= i
    return i if f == n else None


unfactorial(120) # 5
票数 1
EN

Stack Overflow用户

发布于 2020-02-14 05:00:58

以下是您可以做的几件事:

代码语言:javascript
复制
Num = int(input())
i=0                     # your for loop will initialize i, you don't need to do this here

for i in range(0,Num):  
  i = i + 1             # your for loop will increment i, no need to do this either
  x = Num/i             # you don't need the extra variable 'x' here
  Num = x
  if (x==1):
      print(i)

您可以重写此代码,如下所示:

代码语言:javascript
复制
for index in range(1, number):       # start range at 1

        number /= index              # this means; number = number / index

        if number==1:
            return index
票数 0
EN

Stack Overflow用户

发布于 2020-02-14 05:01:07

按升序计算阶乘,直到达到(或超过)您正在寻找的阶乘,使用前一个阶乘有效地计算下一个阶乘。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60216256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档