2017-12-17 10 views
0

내가 여러 숫자에 대한 최대 공약수 컴퓨터에 함수를 작성하고 있는데이 무한에 붙어 붙어 루프 동안 다음에 내 테스트 케이스를 들어자바 스크립트 - 최대 공약수 - 무한 루프

const gcd = (...nums) => { 
    let answer = Math.min.apply(null, nums); 
    while (answer > 0) { 
     for (let index in nums) { 
      if (nums[index] % answer !== 0) { 
       answer--; 
       break; 
      } else if (index === (nums.length-1)){ 
       return answer; 
      } 
     } 
    } 
} 

gcd(20, 155, 30) 

마지막 줄, 나는 5에 도달 할 수 있었다. 그것은 정답이다. 그러나 대답이 5가되면 마치 if 나 else else 문에 도달 할 수 없으며 무한 while 루프에 빠지게됩니다.

모든 포인터?

답변

2

for in 루프를 간단하게 for 루프로 바꿀 수 있습니다. 배열을 반복 할 때는 for in 루프를 사용하지 마십시오.

const gcd = (...nums) => { 
 
    let answer = Math.min.apply(null, nums); 
 
    while(answer > 0) { 
 
     for (let index = 0; index < nums.length; index++) { 
 
      if (nums[index] % answer !== 0) { 
 
       answer--; 
 
       break; 
 
      } else if (index === (nums.length-1)){ 
 
       return answer; 
 
      } 
 
     } 
 
    } 
 
} 
 

 
console.log(gcd(20, 155, 30));