Free Codemp初級アルゴリズム問題-計算整数階乗

1500 ワード

原文のリンク:http://singsing.io/blog/2017/03/17/fcc-basic-factorialize-a-number/
整数の階乗を計算します。
テーマリンク
  • 中国語リンク
  • 英語リンク
  • レベル:初級(Baic Algorithm Scripting)
  • 問題の解釈
  • このfunctionは、1つの整数をパラメータとして受信し、階乗の計算結果
  • を返します。
  • たとえば、受信したのは4です。24
  • に戻ります。
    参照リンク
  • は特に参考になるものではありません。階乗とは何かを知っていればいいです。
    ヒント
  • はとても簡単で、1つの循環、1歩の数を乗せれば
  • です。
  • 注意したいのは、0の階乗と1の階乗は全部1
  • です。
  • 初期条件を設定することが重要です。自分で先に考えてもいいです。
    答えを参考にする
    基本的な答え
    function factorialize(num) {
        var result = 1;
        while (num > 1) {
            result *= num;
            num--;
        }
        return result;
    }
    
    説明
  • サイクルの条件はそのままnum > 1を使えばいいです。何故なら、どんな数に1を掛けても変わらないからです。
  • 初期値は、0に入っても1にしても良いので、結果は1であるべきです。whileループ
  • に入らなくてもいいです。
  • result *= numresult = result * numに相当します。このような書き方は計算に適用され、
  • に再分配される。
  • はきっと忘れないでください。そうしないと無限に循環していきます。もちろん、ここでnum--を循環して書いても大丈夫です。
    階段の答え
  • うん、再帰はいいものです。
    function factorialize(num) {
        //        
        if (num === 0) {
            return 1;
        }
        //     
        return num * factorialize(num - 1)
    }
    
    説明
  • 上のプロセスが分かりませんでしたら、反転文字列の説明を参考にしてください。読み終わったら、この実行過程をどう分析するか分かります。
  • ここの初期判断条件に注意してください。forに設定してはいけません。0に入ると1がもらえなくなります。
  • 、もし入ってきた数字が大きいなら、スタックオーバー(stack overflow、間違いなく、その世界最大のプログラマクイズプラットフォームをこの名前と呼ぶ)が発生する可能性があります。FCCにはこのような検査がないので、ここはもう展開しません。興味のある友達は「最後の再帰最適化」を検索しに行きます。ちなみに、阮一峰先生の文章は
  • です。