簡體   English   中英

為什么遞歸在兩個例子中表現不同?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM