匿名,遞歸,lambda

先讓我熱熱身,寫一個遞歸的函數是來計算n的階乘.不出意外,它應該是這個樣子:
function factorial (n) {
    if (n == 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}
這也太簡單了吧,我要增長一點難度,只准使用匿名函數.
哼哼,so easy.
function (n) {
    if (n == 1) {
        return 1;
    } else {
        return n * this(n - 1);
    }
}
而後我就想,若是不使用 this 關鍵字,有沒辦法呢?我眉頭一皺

timg (1).jpg

但俗話說的好,再狡猾的獵人也鬥不過一隻好狐狸啊!我略一思索,不肖片刻便行雲流水般寫下以下代碼:
(function(n,factorial) { //求n的階乘 n = 5

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

})(5,function(n,factorial) {

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

})
站在公司新發的工程學座椅上,品一口82年的java

image

隨後志得意滿的對旁邊工位的jack說,"jack,你看我這一手js代碼寫    得如何啊?"
jack連眼皮都沒擡一下,只輕輕說了句"這麼醜的代碼也好意思拿出來   給別 人看?",而後就繼續睡覺了.
我剛想反駁,卻忽然以爲這傢伙說的好有道理啊(⊙o⊙)!
在敲壞37個回車鍵以後,我終於寫出了以下代碼

u=4012774947,2670563879&fm=26&gp=0.jpg

(function(n,factorial) { //求n的階乘 n = 5

    return factorial(n, factorial);
    
})(5,function(n,factorial) {

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

})
又報廢了兩個回車鍵

u=4012774947,2670563879&fm=26&gp=0.jpg

(function (n) {
    return (function(n,factorial) {
        
            return factorial(n,factorial);

    })(n ,function(n,factorial) {

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

    })
})(5)
這時恰逢cto路過!

u=2626950788,2818483429&fm=15&gp=0.jpg

因而

u=4012774947,2670563879&fm=26&gp=0.jpg

(function (requireRecFun) {//將須要遞歸的函數傳進去便可.
    return function (n){return requireRecFun(n,requireRecFun)};
})(function(n,factorial) {
    if (n == 1) {
        return 1;
    } else {
        return n * factorial(n - 1,factorial);
    }
})(5)

image

相關文章
相關標籤/搜索