Форум программистов, компьютерный форум CyberForum.ru

Число Фибоначчи без использования повторных вычислений - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти сумму элементов того массива, в котором больше положительных чисел http://www.cyberforum.ru/cpp-beginners/thread617409.html
Program ABC; Const n=10; m=20; type t1=array of integer; t2=array of integer; var a:t1; b:t2; i,s,k1,k2: integer;
C++ Неправильно работает код Вот ссылка на код #include <iostream> #include <cmath> using namespace std; int main() { cout<<"Введите число "<<endl; int n,k=3; double x1=1,x2=2,x3=1.6667; cin>>n; http://www.cyberforum.ru/cpp-beginners/thread617406.html
Как экспортировать переменную (константу) из dll C++
Понимаю что очень глупый вопрос, но нету времени.. Как экспортировать константу и потом ее получить, динамически подгрузив библу. Функции экспортирую так #ifdef __cplusplus #define EXPORT extern "C" __declspec (dllexport) #else #define EXPORT __declspec (dllexport) #endif
Программа в виде шаблона функции C++
помогите оформить программу в виде шаблона функции, пожалуйста! #include <iostream> using namespace std; int main() { const int size = 4;
C++ Нужна программа с классами http://www.cyberforum.ru/cpp-beginners/thread617349.html
Здравствуйте. Нужна программа с классами, и пояснением что она делает.. абсолютно любая и рабочая Заранее спасибо!
C++ В массиве М(45) найти максимальный В массиве М(45) найти максимальный среди отрицательных элементов и число нулевых элементов стоящих после него подробнее

Показать сообщение отдельно
doomer74
1 / 1 / 0
Регистрация: 01.12.2011
Сообщений: 51
01.07.2012, 16:33  [ТС]     Число Фибоначчи без использования повторных вычислений
Все. До меня дошло, где неправильно. Я не там освобождал память.
Вот работающий код.

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
25
26
27
28
29
#include <conio.h>
#include <iostream>
#include <clocale>
using namespace std;
 
unsigned long Fibonacci (int n, unsigned long * Fib)
{   
    if (*(Fib + n) == 0); // Проверяем элемент массива на равенство нулю. Если не он не равен нулю, значит, мы еще не работали с элементом массива
            {
                if ((n == 1) || (n == 2)) // Первые два элемента последовательности
                    return *( Fib + n ) = 1;
                else 
                    return *( Fib + n ) = Fibonacci(n - 1, Fib) + Fibonacci(n - 2, Fib); //Рекурсивный вызов функции 
            }
            return *(Fib + n);
            delete [] Fib;
}
 
void main()
{ 
    setlocale(LC_CTYPE, "Rus");
    int n; // Количество элементов в последовательности  Фибоначчи
    cout << "Введите число  N = "; cin >> n; // Вводим количество элементов
    unsigned long *Fib = new unsigned long[n]; //Создаем динамический массив под числа Фибоначчи
    for(int i=0; i<n; i++) // Заполняем его нулями
            Fib[i]=0;
    cout << "Число Фибоначчи = " << Fibonacci(n, Fib); // Точка рекурентного вызова функции
    _getch();
}


Цитата Сообщение от taras atavin Посмотреть сообщение
doomer74, а зачем там повторные вычисления?
Ну вот именно, что они там не за чем. А если просто с рекурсией делать алгоритм, там одни и те же значения по несколько раз будут вычисляться. Здесь такого не будет.
Сначала создается массив, заполненный нулями. Потом во время вызова функции будет проверка, равно число нулю или нет. Если не равно, значит, его не трогаем, идем дальше.
Экономия памяти.
 
Текущее время: 18:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru