Треугольник Паскаля представляет собой массив биномиальных коэффициентов. Это треугольник, в котором первая и последняя позиция каждого массива равна 1, а числа между собой представляют собой сумму позиции 0 с позицией 1, позиции 1 с позицией 2 и продолжаются до конца. Вы можете определить количество «этажей», оно будет равно длине массива. Лучший способ понять треугольник Паскаля — это его изображение.
Чтобы решить треугольник Паскаля с помощью JavaScript, мы можем сделать что-то вроде этого:
var createTriangle = function(floor, arr) { var triangle = arr || [[1]]; if(triangle.length === floor) { return triangle; } var prevFloor = triangle[triangle.length - 1]; var currentFloor = [1]; for(var i = 1; i < prevFloor.length; i++) { currentFloor[i] = prevFloor[i] + prevFloor[i - 1]; } currentFloor.push(1); triangle.push(currentFloor); return createTriangle(floor, triangle) }; console.log(createTriangle(10));
Мы собираемся использовать вызов метода createTriangle
, который принимает 2 параметра, один из которых — это пол (лимит строк, которые мы хотим) и массив, который будет треугольником, который мы строим (используется в рекурсии). Затем мы устанавливаем некоторые проверки и базовый случай, потому что мы используем некоторую рекурсию. Нам нужна предыдущая строка треугольника для решения фактического, потому что нам нужно суммировать некоторые значения. Как мы видим на изображении и в теории, треугольник начинается с 1 и заканчивается 1, поэтому мы начнем текущий этаж с 1 и начнем создавать каждую новую позицию с суммы той же позиции предыдущей строки с одной раньше (он должен начинаться с позиции 1, потому что позиция arr[0]
должна быть 1), и мы нажимаем 1 на последнюю позицию обр. После создания этого массива мы помещаем его в треугольник и снова вызываем метод, пока длина массива, состоящего из нескольких массивов (строк), не сравняется с полом, который мы определяем.
Решение на консоли будет таким с примером, используемым в коде:
[ [ 1 ], [ 1, 1 ], [ 1, 2, 1 ], [ 1, 3, 3, 1 ], [ 1, 4, 6, 4, 1 ], [ 1, 5, 10, 10, 5, 1 ], [ 1, 6, 15, 20, 15, 6, 1 ], [ 1, 7, 21, 35, 35, 21, 7, 1 ], [ 1, 8, 28, 56, 70, 56, 28, 8, 1 ], [ 1, 9, 36, 84, 126, 126, 84, 36, 9, 1 ] ]
Последовательность Фибоначчи:
Последовательность Фибоначчи — это ряд чисел, в котором следующее число находится путем сложения двух последних чисел ряда.
ПравилоXn = Xn-1 + Xn-2
var solveFibonacci = function(numb, result) { result = result || [1]; if(result.length === numb) { return result; } if(result.length >= 2) { result.push(result[result.length - 2] + result[result.length - 1]); } else { result.push(result[result.length - 1]); } return solveFibonacci(numb, result); }; console.log(solveFibonacci(14))
Решение n = 14
равно [1,1,2,3,5,8,13,21,34,55,89,144,233,377]
Чтобы решить эту проблему, создайте метод с двумя параметрами, один из которых n
, а другой будет решением n
; если результат не определен, мы установим его равным 1. Поскольку мы используем рекурсию, мы должны установить базовый случай, когда длина array
равна n
. затем мы проверяем, можем ли мы применить правило или просто n-1
, а затем снова вызываем тот же метод.
Если вы просто хотите получить ответ, а не всю последовательность, вы можете решить ее следующим образом:
var solveFibonacci = function(n) { if (n < 2) { return n; } else { return solveFibonacci(n - 2) + solveFibonacci(n - 1); } }; console.log(solveFibonacci(14))
Мемоизация:
Вы можете сделать это, используя что-то вроде Memoization; идея его использования состоит в том, чтобы сохранить результаты на объекте, прежде чем применять некоторую рекурсию и повторять много раз, чтобы найти ответ на то, что мы уже нашли, мы просто ищем объект, где хранятся предыдущие результаты .
var solveFibonacci = function(n, memoization) { memoization = memoization || {}; if (memoization[n]) { return memoization[n]; } if (n < 2) { return n; } else { value = solveFibonacci(n-2) + solveFibonacci(n-1); return memoization[n] = value; } }; console.log(solveFibonacci(14))