Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/48: Рейтинг темы: голосов - 48, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 13

Напишите функцию для вычисления и-го числа Фибоначчи

02.02.2013, 20:43. Показов 8896. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите функцию для вычисления и-го числа Фибоначчи. Реализуйте функцию итеративно и
рекурсивно. Скорость рекурсивной версии не должна быть заметно хуже быстродействие итеративной версии.

long fib(int i) { ... }

Определение:
fib(0) = 1
fib(1) = 1
fib(n) = fib(n1)
+ fib(n2)

Помогите написать пожалуйста))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.02.2013, 20:43
Ответы с готовыми решениями:

Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала числа k.
Напишите программу вычисления суммы: 1! + 2! + 3! + … + n!, используя функцию вычисления факториала числа k. И вновь заранее благодарю,...

Написать функцию вычисления n числа Фибоначчи
3. Элементы числовой последовательности 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, … ...

Написать рекурсивную функцию вычисления числа из ряда Фибоначчи, номер которого вводится с клавиатуры
2. Написать рекурсивную функцию вычисления числа из ряда Фибоначчи, номер которого вводится с клавиатуры. помогите понять рекурсию

12
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 15
02.02.2013, 20:49
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
unsigned long fibonacci (unsigned long);
 
using namespace std;
 
 
int main()
{
    unsigned long result, number;
    setlocale(LC_ALL, "RUS");
        cout << "Введите целое число" << endl;
        cin >> number;
    result = fibonacci(number);
        cout << "Число Фибоначчи(" << number << ") = " << result << endl;
    return 0;
}
 
unsigned long fibonacci ( unsigned long n)
{
    if( n==0 || n==1)
        return n;
    
        return fibonacci( n - 1) + fibonacci ( n - 2 );
}
0
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 13
02.02.2013, 21:01  [ТС]
Спасибо а как сделать чтобы рекурсивно?
0
 Аватар для GggDrej
74 / 74 / 64
Регистрация: 21.01.2013
Сообщений: 147
02.02.2013, 21:13
Цитата Сообщение от hokoko Посмотреть сообщение
Спасибо а как сделать чтобы рекурсивно?
C++
1
2
3
4
5
6
7
unsigned long fibonacci ( unsigned long n)
{
if( n==0 || n==1)
return n;
 
return fibonacci( n - 1) + fibonacci ( n - 2 );
}
это и есть рекурсивная функция
2
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 13
02.02.2013, 21:17  [ТС]
Извините)) Большое спасибо! А как тогда сделать в итеративной версии?
0
 Аватар для GggDrej
74 / 74 / 64
Регистрация: 21.01.2013
Сообщений: 147
02.02.2013, 22:07
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
int n,a,b=1;
main()
{
      std::cin>>n;      
      for (;n--;b+=a)a=b-a;
      std::cout << a;
      system("PAUSE");
}
2
 Аватар для m1Rr0r
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
02.02.2013, 22:25
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
using namespace std;
 
int main()  {
    int n;
    cout << "N = ";
    cin >> n;
    long int *a = new long int[n];
    a[0] = 1;
    a[1] = 1;
    for(int i = 2; i < n; i++)
        a[i] = a[i - 1] + a[i - 2];
    cout << "Fibon[" << n << "] == " << a[n - 1] << endl;
    delete []a;
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 13
02.02.2013, 23:35  [ТС]
Большое спасибо. Насколько я понял пример который привел m1Rr0r также итеративный. (Извините мою некомпетентность в даном вопросе, я только начал изучать С++) В задаче также указано "Скорость рекурсивной версии не должна быть заметно хуже быстродействие итеративной версии." но когда задать например число 45 в рекурсивной версии то оно считает намного дольше итеративной (последний и предпоследний пример). В чем может быть проблема? Помогите решить проблему чайнику)))
0
 Аватар для GggDrej
74 / 74 / 64
Регистрация: 21.01.2013
Сообщений: 147
02.02.2013, 23:48
Можно оптимизировать рекурсивный вариант - но этого делать я не буду.
Если ты только начал изучать с++ - зачем лезть в рекурсию, числа Фибоначчи и прочее. Начни с простого
1
 Аватар для m1Rr0r
250 / 232 / 46
Регистрация: 05.02.2010
Сообщений: 3,288
03.02.2013, 00:20
Цитата Сообщение от hokoko Посмотреть сообщение
Насколько я понял пример который привел m1Rr0r также итеративный.
Все верно, итеративный.
Цитата Сообщение от hokoko Посмотреть сообщение
"Скорость рекурсивной версии не должна быть заметно хуже быстродействие итеративной версии."
Для небольших n так и будет. Для больших, тут уже извините, рекурсия кушает много ресурсов, так что времени занимает многовато.
1
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 13
03.02.2013, 00:41  [ТС]
Большое спасибо за помощь. насчет оптимизации рекурсивной функции как писал уважаемый GggDrej, где можно о том почитать? может есть хорошие книги по оптимизации кода? СПАСИБО!
0
 Аватар для GggDrej
74 / 74 / 64
Регистрация: 21.01.2013
Сообщений: 147
03.02.2013, 01:36
Цитата Сообщение от m1Rr0r Посмотреть сообщение
Для больших, тут уже извините, рекурсия кушает много ресурсов, так что времени занимает многовато.
Вышеописанную рекурсивную функцию можно оптимизировать чтобы она работала намного быстрее.
Дело в том что когда пишем
C++
1
return fibonacci( n - 1) + fibonacci ( n - 2 );
функция считает
fibonacci( n - 1) которое в свою очередь = fibonacci( n - 2) + fibonacci( n - 3), а потом еще раз считаем
fibonacci( n - 2) которое мы уже посчитали в fibonacci( n - 1). Этот момент можно устранить.
2
0 / 0 / 0
Регистрация: 02.02.2013
Сообщений: 13
03.02.2013, 02:12  [ТС]
Всем спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.02.2013, 02:12
Помогаю со студенческими работами здесь

Написать рекурсивную функцию для вычисления k-го члена последовательности Фибоначчи
Написать рекурсивную функцию для вычисления k-го члена последовательности Фибоначчи. Она образуется по закону f1=1, f2=1, fk=fi-1+fi-2...

Написать программу для вычисления n-го числа Фибоначчи
Написать программу для вычисления n-го числа Фибоначчи, используя рекурсию: F(n) = F(n -1) + F(n - 2); F(1) = F(2) = 1.

Напишите рекурсивную функцию для вычисления функции Эйлера
Доброе утро!! Помогите пожалуйста решиь две задачи: Напишите рекурсивную функцию для вычисления функции Эйлера. Для данного n...

Реализовать рекурсивную функцию вычисления n-ого числа из последовательности Фибоначчи по формуле: Fib(0)=1, Fib(1)=1, Fib(n)= Fib(n-1)+ Fib(n-2).
Реализовать рекурсивную функцию вычисления n-ого числа из последовательности Фибоначчи по формуле: Fib(0)=1, Fib(1)=1, Fib(n)= Fib(n-1)+...

Напишите программу, которая использует функцию для вычисления среднего геометрического трех чисел типа int, что вводит пользователь.
Напишите программу, которая использует функцию для вычисления среднего геометрического трех чисел типа int, что вводит пользователь. Язык...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru