2014-07-22 36 views
0

我想计算一个递归函数和jQuery的系列,但我不知道如何记录函数正在做的每个递归,所以我可以得到系列成员。从jquery函数的日志递归

的代码如下:

$(document).ready(function() { 
    $("#button").click(function() { 
     var n = $("#number").val(); 
     function series(n) { 
      if (n == 1) { 
       return 6; 
      } else { 
       return 0.5 * series(n - 1) + 4; 
      } 
     } 
     console.log(series(n)); 
    }); 
}); 

的问题是,该功能仅记录最后一个系列成员。例如,如果n = 4该系列应该是6,7,7.5,7.75。

该函数仅返回7.75。

这是系列公式:series(n) = 0.5 * series(n - 1) + 4,如果n = 1然后series(n) = 6; 谢谢!

回答

0

这不是最美丽的例子看,但如果你把你的代码,然后把它包在一个结果阵列的另一个功能。然后调用你的内部递归函数并将它们存储到该数组中,它可以将结果作为数组返回。然后你可以使用一个连接将它变成一个字符串来显示,使用jQuery或控制台登录它。

小提琴:http://jsfiddle.net/mcfarljw/hPWuW/

function getSeriesArray(n) { 
    var results = []; 
    function series(n) { 
     if (n === 1) { 
      results.push(6); 
      return 6; 
     } else { 
      var result = 0.5 * series(n - 1) + 4; 
      results.push(result); 
      return result; 
     } 
    } 
    series(n); 
    return results; 
} 
+0

感谢它完成了工作!但是它非常复杂,在Visual Basic或C++中更容易。 puere递归和迭代打印,我会继续调查,必须有一个更简单的方法来做到这一点! – Jadox

0

您使用console.log()只接受最外层序列调用的输出。如果你想记录每一次迭代,你需要记录你的系列方法,或者在系列方法的迭代期间跟踪每个结果,然后记录你用来跟踪的任何内容。

这似乎是家庭作业,所以我不会给太多的东西,但它可能有助于使用浏览器中的检查器来执行代码,并了解代码的流动情况。

+0

:)这不是功课。我想了解递归函数。我试着把'console.log(series(n))'放在函数里面,但是它返回了“最大调用堆栈大小”。我如何跟踪每一次迭代?我已经尝试了一个“计数器”变量,但没有奏效。 – Jadox

+0

如何将它们存储在数组中? – Josh

+0

“最大调用堆栈大小超出”是您创建递归函数的根本问题。快速提问:如果'n'从不1就会发生什么? –

0

试试这个

$(document).ready(function() { 
    $("#button").click(function() { 
     var n = $("#number").val(); 
     function series(n) { 
      var val=6; 
      if (n != 1) { 
       val= 0.5 * series(n - 1) + 4; 
      } 
      console.log(val); 
      return val; 
     } 
    }); 
}); 
+0

不行,它什么都不做。 jQuery中的'int'? – Jadox

+0

它不返回任何内容:( – Jadox

+0

它在控制台上打印输出结果后返回val –