我想找到最长的collatz序列序列,该序列在100以下,并且此代码输出2,这不是答案。当我观察变量时,每当.push()函数将某些内容添加到睾丸中时,它也会添加到最大值中。为什么要在两者的末尾添加一个值?
var n;
var m;
var testary = [];
var maxary = [];
var max;
for(i=2;i<100;i++){
n = i;
m = i;
while(n>1){
if(n%2 == 0){
testary.push(n);
n = n/2;
} else if(n%2 != 0){
testary.push(n);
n = (3*n)+1;
}
if(testary.length>maxary.length){
maxary = testary;
max = m;
}
}}
[当您分配maxary = testary
时,它会将testary的引用分配给maxary,每当您尝试使用push向其中任何一个添加项时,都会影响数组,因为javascript中的引用处的值已更改
您可以在使用spread syntax
分配之前克隆阵列
spread syntax
有趣的小难题。以前从未听说过Collatz。这是我的看法。它会返回前10个序列长度,并显示“获胜”序列。
var n;
var m;
var testary = [];
var maxary = [];
var max;
for(i=2;i<100;i++){
n = i;
m = i;
while(n>1){
if(n%2 == 0){
testary.push(n);
n = n/2;
} else if(n%2 != 0){
testary.push(n);
n = (3*n)+1;
}
if(testary.length>maxary.length){
maxary = [...testary]; // clone the array
max = m;
}
}}