先讓我熱熱身,寫一個遞歸的函數是來計算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 關鍵字,有沒辦法呢?我眉頭一皺
但俗話說的好,再狡猾的獵人也鬥不過一隻好狐狸啊!我略一思索,不肖片刻便行雲流水般寫下以下代碼:
(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
隨後志得意滿的對旁邊工位的jack說,"jack,你看我這一手js代碼寫 得如何啊?"
jack連眼皮都沒擡一下,只輕輕說了句"這麼醜的代碼也好意思拿出來 給別 人看?",而後就繼續睡覺了.
我剛想反駁,卻忽然以爲這傢伙說的好有道理啊(⊙o⊙)!
在敲壞37個回車鍵以後,我終於寫出了以下代碼
(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);
}
})
又報廢了兩個回車鍵
(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路過!
因而
(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)