Другие языки программирования и технологии

Вопрос про Фибоначчи.

Объясните, пожалуйста, алгоритм:
a + b = c;
a = b;
b = c;
Как к нему вообще можно прийти?
Ведь дано, сначала:
Последующее число равно сумме прошедших.
Начнём писать алгоритм программы:

— Вывод на экран: «Последовательность = »

— Первое число а = 0

— Вывод на экран а: «Последовательность = 0»

— Второе число b = 1

— Вывод на экран b: «Последовательность = 0 1»

(¤¹) — Третье число c = a + b

— Вывод на экран c: «Последовательность = 0 1 1»

Теперь, для продолжения алгоритма нужно либо вводить ещё переменные, либо забыть о первом (оно больше не понадобится) и сдвинуть значения, освободив c под новое значение:

с → b → a → nul

т. е.

а = b

b = c

— Очередное число c = a + b

(¤²) — Вывод на экран c: «Последовательность = 0 1 1 2»

Снова сдвигаем:

с → b → a → nul

т. е.

а = b

b = c

— Очередное число c = a + b

— Вывод на экран c: «Последовательность = 0 1 1 2 3»

… и т. д.

Получился линейный алгоритм, который можно зациклить между (¤¹)—(¤²).

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Вот, как бы, и всё.

Но!

Можно получать числа данной последовательности используя всего 2 переменные…

Это тебе на домашнее задание ;–)
Попробуй найти алгоритм без помощи интернета.
Проверь его правильность найдя, к примеру, 100 или 1000 число Фибоначчи по первому и второму алгоритмам.
СШ
Саня Шумков
73 808
Лучший ответ
Не так! Даны ноль и единичка. А каждое последующее число равно сумме двух предыдущих.
Как прийти от исходного условия к такому алгоритму? Ну так путей-то множество, лишь бы смекалка была и логика работала. a=b, b=c — это такой своеобразный сдвиг влево. Представь, что abc — это три бита некоторого числа, и когда ты меняешь значение c и делаешь вышеозначенные действия, у тебя происходит сдвиг этих битов как при <<.
Да, Серый вроде все верно сказал. Видимо, надо заполнять массив. А так, что тут объяснять. У вас 3 действия, которые гоняются по циклу. Просто каждое получившееся в результате сложения число, кидать в массив. Вот будет массив заполнен этими самыми числами Фибоначчи.
Если бы про Ебаначи спросил...
Роман Мезенко
Роман Мезенко
38 224
int a=0, b=1,c, m=0;
std::cout<<a<<"; "<<b<<"; ";
while(m<20){
c= a+b;
a=b;
b=c;
std::cout<<c<<"; ";
m++;
}
В итоге получим три числа Фибоначчи. Кроме этого все числа будут выводиться на экран. Но правильнее было бы заполнять массив, я полагаю.
Вадим Самойлов
Вадим Самойлов
22 076