Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 404
от 11.05.2006, 15:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 316, Экспертов: 42
В номере:Вопросов: 1, Ответов: 4


Вопрос № 42149: Существует ли алгоритм поиска Фибоначчи? Если да, не могли бы вы привести его. Спасибо!...

Вопрос № 42.149
Существует ли алгоритм поиска Фибоначчи? Если да, не могли бы вы привести его. Спасибо!
Отправлен: 05.05.2006, 16:26
Вопрос задала: Veranda (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: EPDSota
Здравствуйте, Veranda!

Один из простых вариантов:

unsigned long Fibon(unsigned long Position){
if(!Position)return 0;
if((Position==1)|(Position==2))return 1;
return(Fibon(i-1)+Fibon(i-2));
}
---------
Открыть глаза навстречу солнцу
Ответ отправил: EPDSota (статус: Специалист)
Ответ отправлен: 05.05.2006, 16:36

Отвечает: Ramok
Здравствуйте, Veranda!

вот пример
http://khpi-iip.mipk.kharkiv.edu/library/datastr/lab/lab4.html

найдено так:
в http://google.com введена строка поиска "алгоритм поиска Фибоначчи пример" без кавычек
вторая ссылка сверху. ниже не смотрел. но принцип надеюсь понятен Ж:-)
Ответ отправил: Ramok (статус: 1-ый класс)
Ответ отправлен: 05.05.2006, 17:19

Отвечает: Mamont0001
Здравствуйте, Veranda!

Если имеется в виду последовательность 1 1 2 3 5 8 13... :

Создаем массив чисел. Заносим в первый елемент ноль, во второй - 1.

Далее в цикле проходимся по массиву,начиная с 3 элемента и задаем каждый раз значение (сума 2 предыдущих элементов).

Необходимо использовать особо большие беззнаковые типы (unsigned long).
---------
Сон — это маленькая смерть
Ответ отправил: Mamont0001 (статус: 3-ий класс)
Ответ отправлен: 05.05.2006, 19:52

Отвечает: Селиванов Александр Владимирович
Здравствуйте, Veranda!
Числа Фибоначчи вычисляются по следующей формуле:
Ф(n) = Ф(n-2) + Ф(n-1);
Т.е. каждое число равно сумме двух предыдущих.
Ф(0) = 0; Ф(1) = 1.
Вот две функции, вычисляющие Ф(n) разными методами:

__int64 Fibonacci_1(int n) // рекурсивное вычисление
{
if(n == 0)
return 0;
if(n == 1)
return 1;
return Fibonacci_1(n - 2) + Fibonacci_1(n - 1);
}
--------------------------------------------------------
__int64 Fibonacci_2(int n) // итерационное вычисление
{
__int64 f(1), f_1(0), f_2, i;
if(n == 0)
return 0;
if(n == 1)
return 1;
for(i = 2; i <= n; i++)
{
f_2 = f;
f += f_1;
f_1 = f_2;
}
return f;
}

Рекурсивный метод нагляднее, но работает в разы медленнее. Это обусловлено тем, что по нескольку раз приходится вычислять одно и то же число. И чем глубже разворачивается рекурсия, тем больше раз вычисляем одинаковые числа.

Числа растут очень быстро, поэтому предлагаю использовать тип __int64, но это на ваше усмотрение и зависит от выбора компилятора.

Другие алгоритмы вычисления можно посмотреть на
http://algolist.manual.ru/maths/count_fast/fibonacci.php
или ещё где…
Ответ отправил: Селиванов Александр Владимирович (статус: 1-ый класс)
Ответ отправлен: 06.05.2006, 09:37


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.32 от 03.05.2006
Яндекс Rambler's Top100

В избранное