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

По поводу рекурсии - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вывод информации в 1 строке http://www.cyberforum.ru/cpp-beginners/thread156280.html
Тут я в парочке консольных программ видел что, Там вывод идет на одной строке т.е cout << sub; и мне нужно что бы значение вывода менялось в зависимости от изменения переменной sub и делалось это на одном и том же месте. а не перескакивало на другие строчки
C++ Тип - матрица, состоящяя из float'ов 4x4 Как правильно объявить такой тип?? http://www.cyberforum.ru/cpp-beginners/thread156274.html
C++ Два модуля ссылаются на один
В двух модулях есть ссылка #include "Geometry.h" В результате ошибки: f:\projects\test7\geometry.h(9) : error C2011: 'TPoint' : 'struct' type redefinition f:\projects\test7\geometry.h(13) : error C2011: 'TPlane' : 'struct' type redefinition и.т.д. Как избавиться от ошибки??
C++ "Баг" в программе
#include <iostream> #include <conio.h> #include <cstdlib> using namespace std; template <class X> X abs(X n) { if (n < 0) return -n;
C++ Разбор массивов/контейнеров http://www.cyberforum.ru/cpp-beginners/thread156250.html
Только начинаю изучть с++, необходимо сделать 2 ассоциативных динамических массива и походу сразу разобраться что да как. Задача такова, первый массив в пике будет достигать ~300 тыс элементов. Добавление, удаление и поиск элементов по ключу будет производиться ~ 200 раз в минуту. Полное считывание массива будет происходить ~ один раз в 5 минут. При этом в сортировке нет необходимости Второй...
C++ неправильное чтение бинарного файла. программа должна по идее вывести 99.. мне так казалось.. #include <iostream> #include <stdlib.h> #include <stdio.h> using namespace std; int main() { подробнее

Показать сообщение отдельно
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.07.2010, 05:26     По поводу рекурсии
Цитата Сообщение от Lavroff Посмотреть сообщение
Почему же не употреблять тогда? Только потому, что можно обойтись без нее?
Ну почему же сразу не употреблять. Давай попробуем рассмотреть конкретный пример. Самый распространенный с рекурсией вспоминается только нахождение НОД алгоритмом Евклида.

Вот вариант с рекурсией:
C
1
2
3
4
5
6
7
uint nod (uint a, uint b)
{
        if (b == 0)
                return a;
        else
                return nod(b, a % b);
}
вот вариант без рекурсии:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
uint nod(uint m, uint n)
{
    uint r = 0;
 
    r = m % n;
    while(r != 0)
    {
        m = n;
        n = r;
 
        r = m % n;
    }
 
    return n;
}
если брать небольшие числа то разницы в производительности не будет вообще никакой. а если представить, что возможна ситуация, когда вложенность рекурсии достигнет действительно больших размеров, то стоит наверное задуматься. плюс ко всему вариант без рекурсии легко оптимизируется еще одной строкой, уменьшая количество операций. если в самом начале добавить такую проверку:
C
1
2
    if(m < n)
        SWAP(m,n);
но опять же к чему это все, если числа небольшие и разницы мы даже не заметим.

Конечно скуповат примерчик получился, но смысл в том, что надо от конкретной ситуации отталкиваться. Если намного проще написать рекурсивную функцию, то зачем тратить время на разработку аналогичной, но без рекурсии. Сделай прикидку, насколько глубокой будет рекурсия и насколько много времени ты потратишь.
 
Текущее время: 03:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru