[英]Why recursion behave differently in the two examples?
我有兩個遞歸示例,一個計算數組所有元素的總和,第二個返回計數,兩個示例的行為不同,我無法聯系!
第一個例子:
const sum = (list) => { if (list.length === 0) { return 0; } return list[0] + sum(list.slice(1)); }; console.log(sum([1, 2, 3, 4])); // 10
第二:
const count = (list) => { if (list.length === 0) { return 0; } return 1 + count(list.slice(1)); }; console.log(count([0, 1, 2, 3, 4, 5])); // 6
為什么第一個遞歸遍歷所有數組元素添加每個元素,而另一個向每個元素添加 1 然后只返回最終值? 我認為它會做同樣的事情,區別只是在總和上加 1 !
看看return 1 + count(list.slice(1));
在計數函數中。 它只會忽略您以遞歸方式傳遞給函數的列表中的第一個元素,並始終使用 1。而 sum 函數確實會考慮該元素。 這有效地返回了函數被調用的次數,即 6
1st - sum,2nd - count,如果你希望他們做同樣的事情,你應該只使用其中的一個。
遞歸是一樣的。
它訪問數組的所有元素,如果沒有可用元素,則返回零。
對於每個元素,它返回求和項或計數項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.