在递归函数中,初始为空的数组如何添加元素?——freeCodeCamp JS问题咨询
递归函数countup的数组返回逻辑解析
先看你给出的代码:
function countup(n) { if (n < 1) { return []; } else { const countArray = countup(n - 1); countArray.push(n); return countArray; } } console.log(countup(5));
你疑惑countup(n-1)的返回值不是数组,其实它每一次调用最终都会返回数组,我们以countup(5)为例拆解执行流程:
递归调用的「向下深入」阶段
- 调用
countup(5):n=5≥1,需要先执行countup(4),等待它的返回结果 - 调用
countup(4):n=4≥1,执行countup(3),等待返回 - 调用
countup(3):n=3≥1,执行countup(2),等待返回 - 调用
countup(2):n=2≥1,执行countup(1),等待返回 - 调用
countup(1):n=1≥1,执行countup(0),等待返回 - 调用
countup(0):n=0<1,触发终止条件,直接返回空数组[]
递归调用的「回溯返回」阶段
现在开始从最底层的结果往回传递:
countup(1)中的countArray接收的是countup(0)返回的[],执行push(1)后数组变成[1],返回这个数组countup(2)中的countArray接收的是countup(1)返回的[1],执行push(2)后变成[1,2],返回countup(3)中的countArray接收[1,2],push(3)后变成[1,2,3],返回countup(4)中的countArray接收[1,2,3],push(4)后变成[1,2,3,4],返回countup(5)中的countArray接收[1,2,3,4],push(5)后变成[1,2,3,4,5],最终返回这个数组
所以每一层countup(n-1)的返回值都是数组,自然可以调用push方法。
内容的提问来源于stack exchange,提问作者nguyenmanhcuong.
相关产品推荐
相关产品推荐

