[英]JavaScript recursive function using ternary operator
為什么遞歸function要返回function output的三元運算符前要加return語句?
// This dose not work function rec(n) { n == 1? n: n + rec(n - 1); } // This works as return statement is added before ternary operator function rec(n) { return n == 1? n: n + rec(n - 1); } // This works function rec(n) { if (n == 1) return 1; return n + rec(n - 1); }
// If you would like to do this in one line then correct solution would be: let rec = n => n == 1? n: n + rec(n - 1); // Now you dont need to add the return keyword before // This works as return statement is added before ternary operator function rec(n) { return n == 1? n: n + rec(n - 1); } // This works function rec(n) { if (n == 1) return 1; return n + rec(n - 1); }
遞歸 function 是 function 在執行期間調用自身。 三元運算符決定 function 是否需要調用自身。 所以return語句調用同樣的function。
在示例中n == 1? n: n + rec(n - 1);
n == 1? n: n + rec(n - 1);
如果n=1
則 function 應返回n
的值,否則 function 將使用新值n-1
調用自身。
你需要退貨是因為
n + rec(n - 1);
其中rec(n-1)
調用需要返回一個值才能計算n + rec(n - 1)
,並且每次調用rec()
直到n
達到 1 時才返回 1。
return 在三元運算中絕不是默認值。 return 在箭頭函數中是默認值,但在正常 function 減速中不是默認值。 要從正常的 function 執行返回 output,總是需要添加 return 語句,但在箭頭函數的情況下它是可選的。
function x() { 5;} console.log(x()); // Opuput: undefined let y = () => 5; console.log(y()); // Output: 5
條件表達式(通常稱為ternary
)只是一個表達式。 它產生一個值,但它不做任何事情。 事實上,除非它有副作用,否則它完全沒用,除非你:
您可能會對具有單表達式主體的箭頭函數返回該表達式的結果這一事實感到困惑。 function 仍然會返回它,即使您沒有明確使用return
。 由於這種簡單性,條件表達式經常被用作箭頭 function 的主體。
但是,你必須return
這里並不比你必須擁有它更令人驚訝
function add (x, y) {
return x + y;
}
如果您在那里取出return
,則在調用 function 時仍會發生添加,但不會產生任何值。 你的原作也是這樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.