gpt4 book ai didi

javascript - 有人可以解释 return 语句如何与 javascript 中的递归一起使用吗?

转载 作者:行者123 更新时间:2023-12-03 17:55:08 25 4
gpt4 key购买 nike

我已经查看过论坛,我看到一些标题相似但没有一个能回答我的问题。我注意到如果我创建一个递归函数,返回语句会在它看起来像终止语句之后返回。有人可以向我解释这如何工作吗?谢谢

function recur(n=10){
if(n===0){
return "";
}
console.log(n);
return "A" + recur(n-1);
}

recur()

最终结果是:

10
9
8
7
6
5
4
3
2
1
"AAAAAAAAAA"

我希望它为函数的每个实例返回 A,因为我认为函数定义中的每个语句都会为函数的每个实例调用,如下所示:

10
"A"
9
"A"
8
"A"
7
"A"
6
"A"
5
"A"
4
"A"
3
"A"
2
"A"
1
"A"

所以重申一下为什么函数没有像我预期的那样返回 A,我误解了函数的运行方式是什么?

最佳答案

这样计算可能有助于您理解:

recur(5) = "A" + recur(4)
= "A" + ("A" + recur(3))
= "A" + ("A" + ("A" + recur(2)))
= "A" + ("A" + ("A" + ("A" + recur(1))))
= "A" + ("A" + ("A" + ("A" + ("A" + recur(0)))))
= "A" + ("A" + ("A" + ("A" + ("A" + ""))))
= "A" + ("A" + ("A" + ("A" + ("A"))))
= "A" + ("A" + ("A" + ("AA")))
= "A" + ("A" + ("AAA"))
= "A" + ("AAAA")
= "AAAAA"

因此 recur(5) 返回 "AAAAA"。您应该能够扩展此推理以证明 recur(10) 返回 "AAAAAAAAAA"

您每次打印 n 的值,一个整数,打印 each 递归调用的结果>重复出现。您在最后看到的 "AAAAAAAAAA" 是控制台(shell、REPL、...)显示您执行的所有结果的结果;在这种情况下,您会在 recur() 调用结束时看到它,这与 recur(10) 相同。

如果你想“追踪”这个函数,你可以把结果赋值给一个变量,然后返回它。试试这个:

$ node
> function recur(n=10){
... if(n===0){
..... return "";
..... }
... let result = "A" + recur(n-1);
... console.log(n, result);
... return result;
... }
undefined
> recur()
1 'A'
2 'AA'
3 'AAA'
4 'AAAA'
5 'AAAAA'
6 'AAAAAA'
7 'AAAAAAA'
8 'AAAAAAAA'
9 'AAAAAAAAA'
10 'AAAAAAAAAA'

关于javascript - 有人可以解释 return 语句如何与 javascript 中的递归一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41785908/

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