Javascript Can';t在'中检测无限循环的原因;while循环';在JS中
我的while循环中有一个无限循环,我找不到原因 它是一个简单的函数,返回参数的数字之和。我使用while循环,因为它需要将数字相加,直到到达一位数。 我确保添加了一条语句,确保循环在某一点中断,但显然没有Javascript Can';t在'中检测无限循环的原因;while循环';在JS中,javascript,loops,while-loop,infinite-loop,Javascript,Loops,While Loop,Infinite Loop,我的while循环中有一个无限循环,我找不到原因 它是一个简单的函数,返回参数的数字之和。我使用while循环,因为它需要将数字相加,直到到达一位数。 我确保添加了一条语句,确保循环在某一点中断,但显然没有 function digital_root(n) { num = n; sum = 0; while (num.toString().length>1){ for (i=0; i<num.toString().length; i++) {
function digital_root(n) {
num = n;
sum = 0;
while (num.toString().length>1){
for (i=0; i<num.toString().length; i++) {
sum += parseInt(num.toString()[i])
}
num = sum;
}
return sum;
}
digital_root(456)
函数数字根(n){
num=n;
总和=0;
while(num.toString().length>1){
对于(i=0;i您有一个嵌套循环结构,其中第一个条件始终为true
如果只得到10以下的数字,可以作为递归再次调用该函数
函数数字根(n){
var num=n.toString(),//声明并使用字符串值
总和=0,
我
对于(i=0;i9
?数字_根(总和)
:总数;
}
log(digital_root(456));
既然您已经得到了答案,下面是另一种满足结果的方法
函数数字根(n){
//将数字转换为字符串
//使用split创建一个数字数组,即['4'、'5'、'6']
//在转换为数字后,使用reduce对数字求和
//0是初始值
返回n.toString().split(“”).reduce((a,c)=>a+parseInt(c,10),0)
}
log(digital_root(456))
为了避免所有导致您所面临的情况的嵌套循环,我宁愿以更具可读性的方式进行
function digital_root(n) {
sum = n;
while(sum.toString().length > 1) {
sum = sum.toString()
.split('')
.map(digit => parseInt(digit, 10))
.reduce((acc, cur) => acc + cur);
}
return sum;
}
console.log(digital_root(456));
重新阅读问题后,我注意到您试图将整数减少为单个数字。代码的问题是,sum
仅在while循环之前设置为0
。这意味着它在第二次、第三次……运行时没有重置
将sum=0
移动到while循环中可以解决这个问题。我还在顶部添加了变量声明,以避免设置全局变量
函数数字根(n){
var num,sum,i;
num=n;
while(num.toString().length>1){
总和=0;
对于(i=0;i 控制台日志(数字根(456))
谢谢你的回答,brk,但正如我写Nina一样,这还没有解决我的问题。这里的挑战是,只要总和>9,我就需要不断地将总和的位数相加。或者换句话说,函数必须返回一个单位数整数。这就是我为什么首先使用while循环的原因。有什么想法吗?谢谢你的a回答,尼娜。但这还没有解决我的问题。这里的挑战是,只要求和>9,我就需要不断地将求和的位数相加。或者换句话说,函数必须返回一个单位数整数。这就是我首先使用while循环的原因。有什么想法吗?谢谢你的回答,aghashamim。但是你错过了一个导入问题的ant元素:函数必须返回一个一位数的整数。因此是循环。抱歉,我想我忽略了它,虽然您已经得到了答案,但我刚刚更新了答案中的代码,使其满足要求。非常感谢!我对您的第二个版本的代码有点着迷。我从未想过这是可能的在同一个函数中返回函数调用而不是while循环。哇!@elifbrikant谢谢。当我第一次读这个问题时,我没有注意到“我使用while循环,因为它需要将数字相加,直到它到达一个一位数。”,所以我提高了。只有在我重新阅读之后,我才注意到这不是你想要的答案。这个问题的表述非常好,但我猜具体的问题被太多的噪音所包围。我不太确定我会如何表述这个问题,也许会把要求放在一个列表中。在这里,人们经常跳过一半的内容。