gpt4 book ai didi

javascript - 通过递归检查均匀性(Eloquent javascript-exercise)

转载 作者:行者123 更新时间:2023-11-30 21:11:58 27 4
gpt4 key购买 nike

我已经开始阅读 Eloquent Javascript,并且有一个关于制作递归函数来检查均匀性的练习。我用几种不同的方法做到了,它很简单,但出于某种原因,我不能再让它与负数一起工作了。我让它工作,然后可能不小心改变了一些东西,现在它只对积极的工作。

你能告诉我为什么这段代码是“错误的”吗?

(textfield.append 只是将一些内容打印到我在 html/css 文档中创建的文本字段,因此我可以将练习保存在某种“程序”中。)

function evencheck(n){
if (n == 0){
$('#textfield').append('Even');
}
if (n == 1 || n == -1){
$('#textfield').append('Uneven');
}
else{
if(n > 1){
n -= 2;
evencheck(n);
}
if(n < -1){
n += 2;
evencheck(n);
}
}

}

我知道它可以写得更短,我做了一个更短的形式,但这对底片也不起作用。

我知道问题是堆栈溢出,但为什么会这样?

最佳答案

不是答案而是扩展评论

function evencheck(n){
if (n == 0){
return $('#textfield').append('Even');
}
if (n == 1 || n == -1){
return $('#textfield').append('Uneven');
}
return evencheck(n > 1? n-2 : n+2);
}

上面的代码可能会更快,因为编译器可以将其优化为:

function evencheck(n){
while(true){
if (n == 0){
return $('#textfield').append('Even');
}
if (n == 1 || n == -1){
return $('#textfield').append('Uneven');
}
n = n>1? n -2 : n+2;
}
}

所以你没有填满函数堆栈(可能真的很大),而且它实际上非常快。

More about that

关于javascript - 通过递归检查均匀性(Eloquent javascript-exercise),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46039491/

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