【问题标题】:Anyway to inverse factorial function?反正逆阶乘函数?
【发布时间】:2016-06-10 16:16:50
【问题描述】:

所以问题是这样的,我是python新手:

def factorial_cap(num):对于正整数n,n的阶乘(记为n!)是乘积 包含从 1 到 n 的所有正整数。实现返回最小的函数
正 n 使得 n!大于或等于参数 num。 o 假设:num 永远是一个正整数。

# Examples 
# factorial_cap(20) output is 4  since 3!<20 but 4!>20
# factorial_cap(24) output is 4 since 4!=24
# factorial_cap(1) output is 1 since 1!=1

# And here is what I got

def factorial_cap(num):
    n = 1
    for i in range (1,num+1):
        n = n*i    

我很确定这是阶乘 def 的正确函数。但我就是想不通,除了得到“总价值”,我怎样才能得到我上面发布的例子的正确输出?

顺便说一句,我应该在 def 的末尾使用“return”,还是在这种情况下没关系?

【问题讨论】:

  • 尝试在 for 循环后使用 return n。同样在您的循环中,将range(1, num+1) 更改为range(2, num+1),您不必再将数字乘以1。
  • @BasSwinckels 当然是。
  • 顺便说一句,您可以将斯特林近似用于“阶乘反转”:math.stackexchange.com/questions/61755/…
  • 是的,return n 非常重要。这就像韦伯斯特写下一个词的定义,但没有把它放在字典里。不退的话n就没用了。

标签: python algorithm


【解决方案1】:

需要测试当前总数何时大于或等于请求的数字。因此,您可以使用 while 循环的条件来执行该检查,并增加一个计数器 i,以跟踪当前的迭代。然后就是返回产生值 >= 所需数字的i 的当前值:

def factorial_cap(num):
    n = 1
    i = 1
    while n < num:
        i += 1   
        n *= i
    return i

>>> factorial_cap(20)
4
>>> factorial_cap(24)
4
>>> factorial_cap(25)
5
>>> factorial_cap(1)
1
>>> factorial_cap(3628800)
10

【讨论】:

    【解决方案2】:

    你想要一个回报,但那不是n,而是i

    def factorial_cap(num):
    
        n = 1
        i = 0
    
        while True:
    
            i += 1
            n = n*i
            if n >= num:
                break
    
        return i
    
    print(factorial_cap(20))
    print(factorial_cap(24))
    print(factorial_cap(1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 2021-01-17
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 2022-06-24
      相关资源
      最近更新 更多