I'm trying to find the longest Collatz sequence for numbers less than, say 100, but there's a bug that I can't find, that makes my code crash:
var longest=0; //holds the biggest m
var m=0; //count of steps for at given n
//in the following, the counter var starts the sequence by giving it's
//value to n, then n loops the sequence. When loop finishes as n == 1, new
//number is looped (n = counter++)
for(var counter = 2; counter <100; counter++){
var n = counter;
while(n!= 1){ //when n==1, loop should stop
if(n%2 == 0){
n = even(n);
m++;
}
if(n%2 != 0){
n = odd(n);
m++ ;
}
}
if(m>longest){
longest = m;
}
m = 0; // resets m counter of steps in loop for new number to loop
}
function even(k){
return k/2;
}
function odd(k){
return 3*k+1;
}
Why is my code crashing?
Instead of counter you should consider using
ninside the while loop and also you need to useif-elseinstead ofif-if.because it is the
nthat will change in while loop not counter. And you are basically resetting value ofnbefore while loop. So you should check the running value ofn.Collatz sequence simply in each step do perform operation based on it's parity.