3
我想在Rosalind頁面上成功完成this challenge。挑戰是:申請斐波那契,使用大數
鑑於:正整數
n≤40
和k≤5
。回報:如果我們從1對開始,在每個世代中,將會在
n
個月後出現的兔子對的總數,每對繁殖年齡兔子產生一對k
兔子對(而不是僅1對)。
該練習給出了兩個數字的文本文件,上面提到的n
和k
。
我的代碼試圖實現斐波那契,如預期的那樣在較短的月數內工作。然而,結果開始變得非常大,爲更高的月份,並在每種情況下,我被給予,我的回答是Infinity
。
我的公式應用不正確?或者,JavaScript是這種練習使用的不恰當的語言選擇?
我的代碼:
function fibonacciRabbits(months, pairs){
var months = months;
var numberOfPairs = pairs;
var result = 0;
// Declare parent & child arrays with constants
var parentArr = [1, numberOfPairs + 1]
var childArr = [numberOfPairs, numberOfPairs]
var total = []
// Loop from the point after constants set above
for(var i = 2; i < months - 2 ; i++){
parentArr.push(parentArr[i-1] + childArr[i-1])
childArr.push(parentArr[i-1] * childArr[i-2])
total.push(parentArr[i-1] + childArr[i-1])
}
result = childArr[childArr.length - 1] + parentArr[parentArr.length - 1]
console.log(months + ' months and ' + numberOfPairs + ' pairs:\n')
console.log('parentArr:\n', parentArr)
console.log('childArr:\n', childArr)
console.log('total\n', total)
console.log('result:', result)
console.log('\n\n\n')
}
fibonacciRabbits(5, 3)
fibonacciRabbits(11, 3)
fibonacciRabbits(21, 3)
fibonacciRabbits(31, 2)
這裏是一個REPL
只要任何數字大於約1.79E + 308,就會失敗:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE – davejagoda
我是不知道我理解你的問題,所以對你的算法沒有意見;但如果你的問題是處理大數字,你可能想看看這裏:https://stackoverflow.com/questions/3072307/what-is-the-standard-solution-in-javascript-for-handling-big -numbers-bignum(JS在這方面確實有限,但幾乎所有語言都是:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE) – phtrivier
python [https://www.python.org/dev/peps/pep-0237/]和ruby [http://patshaughnessy.net/2014/1/9/how-big-is-a-bignum]都可以處理這個特定的情況,而不用擔心達到某個最大整數。 – davejagoda