【问题标题】:Starting loops with python用python开始循环
【发布时间】:2016-02-22 18:26:18
【问题描述】:

所以我们刚刚开始学习循环并得到了这个任务

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

例子:

factorial_cap(20) → 4 #3!20

factorial_cap(24) → 4 #4!=24

谁能告诉我从哪里开始?我什至不知道如何开始这个。我完全理解我的程序应该做什么,只是不知道如何启动它。

【问题讨论】:

    标签: python loops python-3.x functional-programming


    【解决方案1】:

    就是不断将参数除以 [1...n]。当数字变得小于除数时,除数就是答案。

    20/1=20;
    20/2=10;
    10/3=3.33<4--------------4
    
    30/1=30;
    30/2=15;
    15/3=5;
    5/4=1.25<5---------------5
    
    90/1=90;
    90/2=45;
    45/3=15;
    15/4=3.75<5--------------5
    
    900/2=450;
    450/3=150;
    150/4=37.5;
    37.5/5=7.5;
    7.5/6=1.25<7-------------7
    

    函数应该是这样的:

    def factorial_cap(num):
        c=1
        while(c<num):
            num=num/float(c)
            c=c+1
        return c
    

    【讨论】:

    • 对不起,我不是 python 人,所以给了你逻辑。
    • 如果有帮助,请标记答案 - 这样对未来的访问者也有帮助;)。谢谢
    【解决方案2】:

    在递归函数中有两个主要组成部分:

    1. 递归调用
    2. 基本情况

    递归调用是当您从自身内部调用函数时,基本情况是函数返回/停止调用自身的地方。

    对于您的递归调用,您需要 nfactorial(n-1),因为这本质上是阶乘 (n(n-1)(n-2)...*2)。按照这个逻辑,基本情况应该是当 n == 2 时。

    祝你好运,希望我能够为你指明正确的方向。

    【讨论】:

      【解决方案3】:

      一种简单的方法是从 1(或 0)开始计算每个整数的阶乘,直到某个数的阶乘大于或等于 num

      def factorial_cap(num):
          number = 0
          factorial = 1
          while(factorial < num):
              number += 1
              factorial = factorial * number
          return number
      

      number = 0开始,我们知道0!是 1,所以factorial = 1。 使用 while 循环计算下一个数的阶乘,将前一个阶乘乘以新数 (n! = (n - 1)! * n),直到大于或等于 num,最后返回该数。

      【讨论】:

        猜你喜欢
        • 2023-04-11
        • 2020-09-05
        • 2012-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-30
        相关资源
        最近更新 更多