2014-07-22 37 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 –