>

헤더 : console.logging하고 싶은 것을 반환합니다.

데이터 구조에 계산하는 데 필요한 2의 거듭 제곱을 저장하고 싶지만 재귀 적이므로 각 함수 호출을 덮어 쓰지 않고 문자열 또는 배열로 출력을 저장하는 데 문제가 있습니다.

request.session 를 사용하는 것과 거의 같습니다 . 콘솔 로깅을 저장하려면 어떻게해야합니까?

내가 시도했다 :

if(!this) {then that}

그러나 이것은 결코 존재하지 않으므로 매번 실행됩니다. 어쩌면 매개 변수를 통해 전달하는 것이 이것을 해결하는 방법 일 수 있지만 매개 변수는 n 일뿐이며 함수는 n 만 가져 와서 이진 등가와 관련된 일부 정보를 출력하기를 원하지만 아마도 모든 것이 잘못되었을 것입니다.

내가 console.log 할 수있는 것이 재미 있다고 생각한다  하지만 배열로 푸시 할 수는 없습니다.

어떻게 진행할 수 있습니까?

function binary(n){
    if(n == 0){
        console.log("The end");
        return 0;
    }
    var b, x;
    for(var i = 0; i <= 10; i++){
        b = Math.pow(2,i);
        if(b > n){
            var p = i-1;
            console.log("2 to the",p, "is on");
            x = Math.pow(2,i-1);
            n = n-x;
            return binary(n);
        }
    }
}
binary(12);
binary(365);
// 12 == 2^3(1) + 2^2(1) + 2^1(0) + 2^0(0)
// 12 == 1100

바닥 글 :

[Running] node "/Users/maxwelljann/Desktop/cracking_the_coding_interview/b3.js"
2 to the 3 is on
2 to the 2 is on
The end
2 to the 8 is on
2 to the 6 is on
2 to the 5 is on
2 to the 3 is on
2 to the 2 is on
2 to the 0 is on
The end


  • 답변 # 1

    함수에 형식 매개 변수가 있다고해서 초기 호출에서 전달해야하는 것은 아닙니다. 채우지 않은 매개 변수는 undefined 로 설정됩니다. :

    function showMeTheArray (num, array) {
      console.log(array);
    }
    showMeTheArray(42);
    
    

    ES2015에서는 정의되지 않은 인수에 대한 기본 매개 변수를 설정할 수 있습니다 :

    function showMeTheArray (num, array = [1, 2, 3]) {
      console.log(array);
    }
    showMeTheArray(42);
    showMeTheArray(42, ['I passed it this time']);
    
    

    따라서 재귀 호출에서 배열을 binary() 에 전달할 수 있습니다. 사용자에게 요구하지는 않습니다 :

    function binary (n, array = []) {
      if (n == 0) {
        return [...array, 'The end'];
      }
      var b, x;
      for (var i = 0; i <= 10; i++) {
        b = Math.pow(2, i);
        if (b > n) {
          var p = i - 1;
          const newArray = [...array, `2 to the ${p} is on`];
          x = Math.pow(2, i - 1);
          n = n - x;
          return binary(n, newArray);
        }
      }
    }
    console.log(binary(12));
    console.log(binary(365));
    
    

  • 답변 # 2

    콘솔 로깅을 저장하는 전역 배열을 생각할 수 있습니다.

    var globalArray = []; //Global array
      function binary(n){
        if(n == 0){
          console.log("The end");
          return 0;
        }
        var b, x;
        for(var i = 0; i <= 10; i++){
          b = Math.pow(2,i);
          if(b > n){
            var p = i-1;
            globalArray.push("2 to the",p, "is on"); //Add elements to the global array
            x = Math.pow(2,i-1);
            n = n-x;
            return binary(n);
          }
        }
      }
    
    

    출력 : 변수가 함수 범위를 벗어나므로 항목을 덮어 쓰지 않습니다.

    binary(2)
    VM458:5 The end
    0
    globalArray
    (3) ["2 to the", 1, "is on"]
    binary(3)
    VM458:5 The end
    0
    globalArray
    (9) ["2 to the", 1, "is on", "2 to the", 1, "is on", "2 to the", 0, "is on"]
    
    

    일반적으로 전역 변수를 사용하는 것은 좋지 않은 일이지만, 실험용으로 만 사용하는 것이 좋습니다. 자세한 내용은이 기사를 확인하십시오.

관련 자료

  • 이전 android - Java에서 Kotlin으로 코드를 변경 한 후 주석이 올바르게 변환되지 않음
  • 다음 svn - 새 지점을 어떻게 만듭니 까?