gpt4 book ai didi

javascript - 我的用于获取某个范围内的值的递归解决方案如何真正发挥作用?

转载 作者:行者123 更新时间:2023-12-02 22:19:31 26 4
gpt4 key购买 nike

我一直在研究这个问题,要求找到两个给定输入中的值。例如,输入:(1,5) 产生结果:[1,2,3,4,5]。这个问题应该给出一个递归的解决方案。

这是有效的解决方案:

function rangeOfNumbers(startNum, endNum) {
if (endNum - startNum === 0) {
return [startNum];
} else {
var numbers = rangeOfNumbers(startNum, endNum - 1);
numbers.push(endNum);
console.log(numbers);
return numbers;
}
}

我遇到的麻烦是理解这个解决方案是如何工作的。我尝试通过 console.log 进行调试,看起来值是这样添加的:

[ 1, 2 ]
[ 1, 2, 3 ]
[ 1, 2, 3, 4 ]
[ 1, 2, 3, 4, 5 ]

如果我的 endNum 值最初声明为 5 并且我将 endNum 推到数组的末尾,为什么我的数组看起来不像这样:[ 5, 4, 3, 2, 1 ]

令人惊讶的是,当我将递归函数更改为:

var numbers = rangeOfNumbers(startNum+1, endNum);
numbers.push(startNum);

数组看起来像这样:

[ 5, 4, 3, 2, 1 ]

对此的任何反馈或澄清将不胜感激,谢谢!

最佳答案

基本上它的作用如下:

1) 检查 number(endNum) 是否等于 startNum。 (这是断路器条件)2) 如果它们不相等,它将调用函数 rangeOfNumbers 并将 endNum 减 1。

现在让我们以 rangeOfNumbers(1,3) 为例,使其更小。

让我们调用每个返回number#X,这样我们现在就分配了

1) rangeOfNumbers(1,3)。

start 不等于 end (1!==3),因此我们再次调用 rangeOfNumbers并将其分配给变量numbers(number#1),并且末尾减一。

2)rangeOfNumbers(1,2)。

start 不等于 end(1!==3),因此我们再次调用 rangeOfNumbers并将其分配给变量numbers(number#2),最后减一。

3)数字范围(1,1)。

start 等于 end(1 === 1),因此我们返回 [1] (startNum)

4)基本上,我们将此值分配给 number#2,然后推送 endNum(来自步骤 2;)),所以我们这样做:

// equal to do [1].push(2) because endNum in step2 was 2.
numbers.push(endNum);
return numbers;

5)在此步骤中,我们将第 4 步的返回值分配给 number#1,即 [1, 2],我们在第 4 步中执行相同的操作;

// equal to do [1, 2].push(3) because endNum in step1 was 3.
numbers.push(endNum);
return numbers;

6)我们返回最后一个返回值,因此函数结束。

[1,2,3]

以其他形式查看它,可能是这样的

rangeOfNumbers(1,1) --> this returns [1]
rangeOfNumbers(1,2) --> this returns [1, 2]
rangeOfNumbers(1,3) --> this returns [1, 2, 3]
console.log(result)

这是从下到上读取的,就像LIFO

阅读this article ,用图片详细解释一切

回答您的问题:var number = rangeOfNumbers(startNum+1, endNum);使您的数组成为 [5, 4, 3, 2, 1] 这是因为您将 start 从 1 上升到 5,然后开始推送。如果您阅读了我之前的回答,您就会清楚地发现原因。

function rangeOfNumbers(startNum, endNum) {
if (endNum - startNum === 0) {
return [startNum];
} else {
let numbers = rangeOfNumbers(startNum, endNum - 1);
numbers.push(endNum)
return numbers;
}
}


console.log(rangeOfNumbers(1, 5));

关于javascript - 我的用于获取某个范围内的值的递归解决方案如何真正发挥作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59277156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com