Цикл при вычислении ряда Фибоначчи
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Программа должна вычислить все числа Фибоначчи до числа введенного пользователем. (Ряд Фибоначчи — первые два числа единица, каждое последующее — это сумма двух предыдущих 1, 1, 2, 3, 5, 8...)
Создал массив под хранение чисел, инициализировал его единицей,
а в цикле начинаются чудеса. В проверочном выражении (число Фибоначчи < введенного числа) цикл продолжается пока не выйдет за пределы массива. Компилятор выдает ошибку времени компиляции связанную с переполнением стека (Stack around the variable
num
was corrupted).В отладчике подсветил каждый шаг, выражение
rowFibonachi[i] < num
даетfalse
и все равно цикл не прекращается пока в условие не добавишьrowFibonachi[i] < num && i < N
. Но так цикл заполняет весь массив. Зато в цикле вывода результата это же проверочное условие срабатывает безошибочно.Вот код, объясните пожалуйста в чем собственно проблема. СПАСИБО:)
К началу второго цикла (вычисление ряда Фибоначчи) массив содержит единицы. Перед любой итерацией второго цикла
rowFibonachi[i]
будет равно 1, что меньшеnum
. Условие в циклеfor
проверяется перед выполнением тела цикла.Условие
(rowFibonachi[i] < num)
надо проверять после вычисления i-ого члена ряда. Т.е. либо использоватьbreak
, либо использовать цикл с постусловием.А вообще, для вычисления чисел Фибоначчи массив совершенно не обязателен. Достаточно помнить два предыдущих членов ряда.