Я пытаюсь успешно завершить this challenge на странице Rosalind. Задача состоит в следующем:Применение Фибоначчи, работа с большими числами
Дано: Положительные целые числа
n≤40
иk≤5
.Возврат: Общее количество пар кроликов, которые будут присутствовать после
n
месяцев, если мы начинаем с 1 парой и в каждом поколении, каждая пара репродукции возраст кроликов производит помет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