В последовательности Фибоначчи первые два числа равны нулю и единицам. Каждое число после них представляет собой сумму предыдущих двух чисел. Таким образом, первые несколько цифр являются
F(0) ≡ 0
F(1) ≡ 1
F(2) = F(1) + F(0) = 1 + 0 = 1
F(3) = F(2) + F(1) = 1 + 1 = 2
F(4) = F(3) + F(2) = 2 + 1 = 3
F(5) = F(4) + F(3) = 3 + 2 = 5
F(6) = F(5) + F(4) = 5 + 3 = 8
...
F(n) = F(n - 1) + F(n - 2) ∀ n > 1
Поэтому при вычислении чисел Фибоначчи рекурсивно мы должны практиковать следующую логическую процедуру (в псевдокоде из уважения к StackOverflow).
Integer NthFibonacci(Integer n) {
if (n < 0) {
return undefined;
} else if (n < 2) {
return n;
} else {
return NthFibonacci(n - 1) + NthFibonacci(n - 2);
}
}
Я уверен, что вы знаете все это, но я думаю, что это поможет моему объяснению, чтобы эта часть была ссылкой.
Где Ones и Нули Come In
Лучший способ объяснить это, вероятно, с примером.
Представьте себе, что, как указано выше, мы пытаемся рекурсивно вычислить F(6)
. Попробуйте выполнить описанную выше процедуру. Помните, что мы выполним рекурсию, только если n> 1.
Сначала мы начинаем с F(6) = F(5) + F(4)
.
Затем мы находим F(5) = F(4) + F(3)
.
Затем мы находим F(4) = F(3) + F(2)
.
Затем мы находим F(3) = F(2) + F(1)
.
Затем мы находим F(2) = F(1) + F(0)
.
Здесь все наладилось!
В настоящее время мы получили F(2)
с точкой зрения F(1) ≡ 1
и F(0) ≡ 0
(оба из которых известно), и поэтому мы можем рассчитать фактическое значение вместо выполнения более рекурсии.
Теперь мы можем найти F(2) = F(1) + F(0) = 1 + 0 = 1
.
УВЕДОМЛЕНИЕ 1 И 0 Это то, о чем люди говорят, когда говорят, что все это сводится к единицам и нулям. Каждый раз, когда мы возвращаемся, чтобы найти базовое значение, мы получим F(2) = 1 + 0
. Это приводит к увеличению числа и нулей в качестве . Мы возвращаемся к нашему дереву рекурсии, чтобы вычислять более высокие и более высокие значения, как показано ниже.
F(3) = F(2) + F(1) = (1 + 0) + 1
F(4) = F(3) + F(2) = ((1 + 0) + 1) + (1 + 0)
F(5) = F(4) + F(3) = (((1 + 0) + 1) + (1 + 0)) + ((1 + 0) + 1)
F(6) = F(5) + F(4) = ((((1 + 0) + 1) + (1 + 0)) + ((1 + 0) + 1)) + (((1 + 0) + 1) + (1 + 0))
Теперь, если вы сложите все 1-х вы получаете сумму 8, и так F(6) = 8
, что правильно!
Так оно и работает, и это то, как он разбивается на одни и на нули.
Возможно, это поможет, если вы аннотировали узлы fib (n) с результатами, возвращаемыми узлами; или если вы полностью разработали фиб (5) на бумаге. Другой способ взглянуть на это: сумма тех тщательно построенных (!) 0s и 1s приводит к fib-5, потому что именно так определяется fib-5; сродни сумме «1» и «2», определяемой как «3». – Lars