• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Размышления о программировании. Числа Фибоначчи

  • Автор темы Автор темы AlexZir
  • Дата начала Дата начала

AlexZir

support
Команда форума
Супер модератор
Регистрация
19 Авг 2007
Сообщения
15,802
Реакции
491
Баллы
0
Последовательность Фибоначчи состоит из целых чисел, получаемых путем сложения двух предыдущих. Таким образом, это бесконечная последовательность чисел: (1,1,2,3,5,8,13,21,34,55...). Для решения задачи на числа Фибоначчи нужно знать параметры окончания вычисления (условие), также обязательно нужно предусмотреть переменные для хранения 2 предыдущих чисел, чтобы вычислить следующее. Так как все задания можно подразделить на группы по результату обработки последовательности, то выделим следующие типы заданий:
1) Нахождение n-го числа последовательности.
2) Нахождение суммы или произведения чисел последовательности до выполнения некоторого условия.
3) Нахождение некоторого числа из последовательности, удовлетворяющего поставленному условию.
4) Решение задач на числовые последовательности с использованием чисел Фибоначчи.

В любом случае, независимо от типа задания, первым шагом нужно сформировать саму последовательность. Первые числа получаются элементарно, путем присваивания двум переменным значения 1. Последующие числа получаются путем циклического вызова следующей последовательности команд:
число=пер1+пер2
пер1=пер2
пер2=число

В задании типа 1 этой последовательности команд обычно достаточно, так как после этого идет вывод полученного числа. Параметр цикла for позволяет выполнить вычисления нужное количество раз.

Однако если речь о заданиях типа 2 или 3, то перед генерацией следующего числа последовательности нужно проверить условие на истинность или выполнить другие вычисления (сложение или умножение) с предыдущими числами последовательности. Кроме того, во избежание ошибок вычислений результирующую переменную нужно инициализировать значением до цикла. Я обычно делаю сразу результат=1, а потом перехожу к циклу.

Таким образом, для задач 2 типа будет выполняться следующий ряд команд, исполняемых в цикле while:
результат=результат+пер2 (или результат=результат*пер2)
число=пер1+пер2
пер1=пер2
пер2=число

В качестве условия для выхода из цикла while можно использовать сравнение значения переменной пер2 (n-1 член последовательности) с ограничивающим значением.

Для заданий 3 типа команды внутри цикла будут немного измененными:
если пер2 не эталон то
{число=пер1+пер2
пер1=пер2
пер2=число
}

Недавно на форуме было задание 4 типа, привожу полностью листинг на алгоритмическом языке:
Код:
|Написать программу, вычисляющую сумму элементов последовательности
|S=1/1+1/1+1/2+1/3+1/5+1/8+1/13+...
|с точностью eps=0.5
алг фибоначчи
нач
   цел pre1,pre2,tek,k
   вещ s,nn,eps
   s:=0
   eps:=0.5 
   pre1:=1
   pre2:=1
   tek:=pre2
   k:=1
   nn:=1/tek
   нц пока nn>=eps
          k:=k+1
          s:=s+nn
          pre1:=pre2
          pre2:=tek
          tek:=pre1+pre2
          nn:=1/tek
   кц
   вывод "Сумма членов последовательности, не меньших ",eps, " равна ",s, нс
   вывод "Всего было проверено ",k," члена последовательности"
кон

Естественно, что приведенное описание решения не охватывает всего разнообразия заданий и описывает только базовые структуры, но для умного человека оно будет неплохим подспорьем :)
 
Лёша, это что такое вообще??????????????????
Это ты нас всех послал??? :)
 
KUS;bt4623 написал(а):
Лёша, это что такое вообще??????????????????
Это ты нас всех послал??? :)
Не, Дима - не то. Это я почти ненормативно послал одну бездельницу (здесь и ниже), а Лёша решил вколотить в нее и подобных лентяев высокую математическую науку. Кувалдой.
Ну-ну...
 
Назад
Сверху