2016-07-29 4 views
1

Я рассмотрел более чем несколько вопросов «слишком много рекурсии» и ответы здесь, но каждый из них решает конкретную проблему, но я не мог вывести правильный ответ от них чтобы ответить на эту ошибку кода, как ее решить и почему я получаю эту ошибку:Javascript «слишком много рекурсии» по простой факториальной функции

<body> 
<input type="number" id="num"> 
<input type="button" id="submit" onclick="factor()"><br> 
<div id="yourResult"></div> 
<script> 
    inputValue = document.getElementById('num').val; 
    function factor(n){ 
     if(n==0){ 
      return 1; 
     } 
     if(n==1){ 
      return 1; 
     } 
     return n * factor(n-1); 
    } 
    function result() { 
     $('yourResult').append('<p>your factorial of ' + inputValue + ' equals to: ' + factor()+'</p>'); 
    } 
</script> 
</body> 
+5

Вам нужно пройти вход функции в первый раз, когда вы его вызываете, иначе будет бесконечная рекурсия. –

+0

параметр передачи в функции вызова или проверки с входным значением не n. –

ответ

4

Вам необходимо передать значение параметра.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<body> 
 
<input type="number" id="num"> 
 
<input type="button" id="submit" value="Get Factorial" onclick="result()"><br> 
 
<div id="yourResult"></div> 
 
<script> 
 

 
    function factor(n){ 
 
     if(n==0){ 
 
      return 1; 
 
     } 
 
     if(n==1){ 
 
      return 1; 
 
     } 
 
     return n * factor(n-1); 
 
    } 
 
    function result() { 
 
     inputValue = document.getElementById('num').value; 
 
     $('#yourResult').append('<p>your factorial of ' + inputValue + ' equals to: ' + factor(inputValue)+'</p>'); 
 
    } 
 
</script> 
 
</body>

+0

проголосовать за те комментарии, которые выглядят вам полезными, помогая другим –

+0

Привет, Sinsuren, спасибо за ваш ответ, но: 1.) ваш код возвращает ту же ошибку («слишком много рекурсий») 2.) Я знаю итеративный подход, но мне нужно он должен работать в рекурсивном подходе, пожалуйста, снова обратитесь к моему вопросу. Проверьте свой ответ, он не работает. – clusterBuddy

+0

Да, он отлично работает, и вы сохранили единообразие кода и действительно помогли, спасибо. – clusterBuddy

1

Эй @clusterBuddy сделать это правильно document.getElementById('num').val к document.getElementById('num').value и попробуйте ниже код будет дает факторный результат:

<script type="text/javascript"> 
    function factor(){ 
    var n=document.getElementById("num").value; 


     var factorial = function(n) { 
     if(n == 0) { 
      return 1 
     } else { 
      return n * factorial(n - 1); 
     } 

     } 
     document.getElementById("yourResult").innerHTML ="your factorial is"+factorial(n); 

    } 
</script> 
<body> 
<input type="text" id="num"> 
<input type="button" id="submit" value="submit" onclick="factor()"><br> 
<span id="yourResult"></span> 
</body> 
+0

Вы изменили некоторые вещи, но ваш код работает как золото. Благодарю вас, мистер Вишал. – clusterBuddy

Смежные вопросы