Как проверить, использует ли число даже рекурсивную функцию в JavaScript - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь выполнить упражнение отсюда https://www.w3resource.com/javascript-exercises/javascript-recursion-function-exercise-7.php

Я понимаю решение, однако мне любопытно, почему моя программа не дает такой же ответ, как указано выше.Способ, которым я выбираю возвращаемую функцию, немного отличается, однако вместо true и false выдается число.

function fixthis() {
    function checkeven(num) {
        if (num === 0) {
            return true;
        }
        else if (num === 1) {
            return false;
        }
        else {
            console.log(num);
            return num - checkeven(num - 2);
        }
    }

   
    console.log(checkeven(8));
    console.log(checkeven(9));

}

Ответы [ 4 ]

0 голосов
/ 03 апреля 2019

:)

let odd = (num%2 == 0) ? return true : return false;

или:

odd = function(n){ (n%2 == 0) ? return true : return false; }
odd(myNr);




checkeven = function(num) {
  if (num === 0) {
    return true;
  }
  else if (num === 1) {
    return false;
  }
  else {
    n = num -2;
    return checkeven(n);
  }
}


console.log(checkeven(8));
console.log(checkeven(9));
0 голосов
/ 21 декабря 2018

в вашем коде возникла проблема, поскольку вы пытались вычесть логическое значение, из-за которого тип corecion встречается в соответствии с правилами, приведенными в инструкциях ecmascript. (https://www.ecma -international.org / ecma-262 / 7.0/ # sec-обычно-и-экзотические-объекты-поведения )

вы можете пойти с помощью следующего решения:

  (function fixthis() {
      function checkeven(num) {

          if (num === 0) {
              return true;
          } else if (num === 1) {
              return false;
          } else {

              let Tempnum = num - 2;
              if (checkeven(Tempnum)) {
                  return true;

              } else {
                  return false;
              }
          }
      }
      console.log(checkeven(8));
      console.log(checkeven(9));

  })()
0 голосов
/ 21 декабря 2018

Поскольку вы делаете неправильный код, замените в коде «return num - checkeven (num - 2)» на «return checkeven (num - 2)»

function checkeven(num) {
        if (num === 0) {
            return true;
        }
        else if (num === 1) {
            return false;
        }
        else {
            return checkeven(num - 2);
        }
    
} 
 console.log(checkeven(8));
    console.log(checkeven(9));
0 голосов
/ 21 декабря 2018

В JavaScript - когда операнды для оператора имеют разные типы - происходит тип corecion, т.е. он пытается преобразовать один из операндов в тип, совместимый с оператором

Попробуйте это: console.log(2 + true) //3

console.log(true + false) //1

В вашем случае подумайте, что происходит, когда вы пытаетесь checkeven(2)

checkeven(2) = 2 - checkeven(0) = 2 - true = 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...