日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

js实现阶乘问题代码

發(fā)布時間:2023/11/21 综合教程 50 生活家
生活随笔 收集整理的這篇文章主要介紹了 js实现阶乘问题代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

階乘介紹:一個正整數(shù)的階乘是所有小于及等于該數(shù)的正整數(shù)的積,并且有0的階乘為1。自然數(shù)n的階乘寫作n!

階乘函數(shù)是遞歸函數(shù)典型示例。

階乘的實現(xiàn)方法(一種遞歸,兩種循環(huán)):

 方法1:遞歸

function factorial (num) { 
    if (num < 0) { 
        return -1; 
    } else if (num === 0 || num === 1) { 
        return 1; 
    } else { 
        return (num * factorial(num - 1)); 
    } 
};
factorial(6);

定義階乘函數(shù)一般都要用到遞歸算法;如上面的代碼所示,在函數(shù)有名字,而且名字以后也不會變的情況下,這樣定義沒有問題。但問題是這個函數(shù)的執(zhí)行與函數(shù)名 factorial 緊緊耦合在了一起。為了消除這種緊密耦合的現(xiàn)象,可以像下面這樣使用 arguments.callee。(非嚴格模式)

function factorial(num){
    if (num <=1) {
        return 1;
    } else {
        return num * arguments.callee(num-1)
    } 
}

在這個重寫后的factorial()函數(shù)的函數(shù)體內(nèi),沒有再引用函數(shù)名 factorial。這樣,無論引用函數(shù)時使用的是什么名字,都可以保證正常完成遞歸調(diào)用。

var trueFactorial = factorial;
factorial = function(){
    return 0;
};
alert(trueFactorial(5));     //120

但在嚴格模式下,不能通過腳本訪問 arguments.callee,訪問這個屬性會導(dǎo)致錯誤。不過,可以使用命名函數(shù)表達式來達成相同的結(jié)果

var factorial = (function f(num){
        if (num <= 1){
            return 1;
        } else {
            return num * f(num-1);
     }
});

方法2:for循環(huán)

function factorial (num) {
    if (num < 0) {
        return -1;
    } else if (num === 0 || num === 1) {
        return 1;
    } else {
        for (var i = num - 1; i >= 1; i--) {
            num *= i;
        }
    }
    return num;
};
factorial(6);

方法3:while循環(huán)

function factorial (num) { 
    var result = num; 
    if (num < 0) { 
        return -1; 
    } else if (num === 0 || num === 1) { 
        return 1; 
    } else { 
        while (num > 1) { 
            num--; 
            result *= num; 
        } 
    } 
    return result; 
};
factorial(6);

方法4:尾遞歸

function factorial(n, total) {
  if (n === 1) return total;
  return factorial(n - 1, n * total);
}

factorial(5, 1) // 120

本文轉(zhuǎn)自:https://www.cnblogs.com/jialuchun/p/6559422.html

總結(jié)

以上是生活随笔為你收集整理的js实现阶乘问题代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。