2013-10-26 3 views
0

Я создал функцию, которая уменьшает два числа с отношением дробной части. Он работает отлично, но проблема в том, что он не вернет значение. Я пробовал различные вещи, такие как объявление новой переменной, а затем ее возврат, но это не сработает. Я также добавил пару console.logs, чтобы посмотреть, останавливается ли она в определенном месте, но ничего, это просто ничего не возвращает.

Вот мой код:Функция JavaScript, не возвращающая ничего

function reduceFraction(n, d) { 
    var numerator = n; 
    var denominator = d; 

    if (n % 7 === 0 && d % 7 === 0) { 
     numerator /= 7; 
     denominator /= 7; 
     console.log('Divided by 7'); 
     reduceFraction(numerator, denominator); 
    } else { 
     if (n % 5 === 0 && d % 5 === 0) { 
      numerator /= 5; 
      denominator /= 5; 
      console.log('Divided by 5'); 
      reduceFraction(numerator, denominator); 
     } else { 
      if (n % 3 === 0 && d % 3 === 0) { 
       numerator /= 3; 
       denominator /= 3; 
       console.log('Divided by 3'); 
       reduceFraction(numerator, denominator); 
      } else { 
       if (n % 2 === 0 && d % 2 === 0) { 
        numerator /= 2; 
        denominator /= 2; 
        console.log('Divided by 2'); 
        reduceFraction(numerator, denominator); 
       } else { 
        console.log('Was not divided by anything'); 
        var reduced = numerator + "/" + denominator; 
        return reduced; //console.log(numerator + "/" + denominator); logs 1/18 
       } 
      } 
     } 
    } 
} 
reduceFraction(3, 54); 

Я не знаю, если вложенности кучи если заявления должны сделать что-нибудь с ним, но это единственным способом (что я могу думать) прямо сейчас, что это приведет к сокращению фракция ... Спасибо заранее.

ответ

3

В рекурсивной функции, вам нужен return тоже:

Заменить все

reduceFraction(numerator, denominator); 

вроде этого:

return reduceFraction(numerator, denominator); 
0

вы должны вернуться это

function reduceFraction(n, d) { 
    var numerator = n; 
    var denominator = d; 

    if (n % 7 === 0 && d % 7 === 0) { 
     numerator /= 7; 
     denominator /= 7; 
     console.log('Divided by 7'); 
     return reduceFraction(numerator, denominator); 
    } else { 
     if (n % 5 === 0 && d % 5 === 0) { 
      numerator /= 5; 
      denominator /= 5; 
      console.log('Divided by 5'); 
      return reduceFraction(numerator, denominator); 
     } else { 
      if (n % 3 === 0 && d % 3 === 0) { 
       numerator /= 3; 
       denominator /= 3; 
       console.log('Divided by 3'); 
       return reduceFraction(numerator, denominator); 
      } else { 
       if (n % 2 === 0 && d % 2 === 0) { 
        numerator /= 2; 
        denominator /= 2; 
        console.log('Divided by 2'); 
        return reduceFraction(numerator, denominator); 
       } else { 
        console.log('Was not divided by anything'); 
        var reduced = numerator + "/" + denominator; 
        return reduced; //console.log(numerator + "/" + denominator); logs 1/18 
       } 
      } 
     } 
    } 
} 
return reduceFraction(3, 54); 
Смежные вопросы