Форум программистов, компьютерный форум 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() { подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
30.07.2010, 06:48  [ТС]     По поводу рекурсии
fasked, По поводу НОД. Сейчас попалась эта задача (любым способом найти НОД двух чисел). Написал вот такой лесапед:

Лесапед
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
30
int Nod (int M, int N)
{
    int Noder=0;
    int max=1;
    if(M>N)
    {
        for(int i=1;i<M;i++)
        {
            if((M%i)==0&&(N%i)==0)
            {
                Noder=i;
                if(Noder>max)
                    max=Noder;
            }
        }
    }
    else
    {
        for(int i=1;i<N;i++)
        {
            if((M%i)==0&&(N%i)==0)
            {
                Noder=i;
                if(Noder>max)
                    max=Noder;
            }
        }
    }
    return max;
}


Это очень плохо, если так написано или как вариант вполне возможно?
П.П.С. По поводу рекурсии... Не понял как оно считает это:
C++
1
2
//        else
//                return Nod(b, a % b);
Так. По поводу кол-ва вызовов прямых и обратных понял
Подаем мы второе число, и остаток от деления первого на второе... Как мы получаем конечный результат?
Так... Если значение a<b меняем их местами...

Я так понимаю все идет вот по этому алгоритму?
НОД(0, n) = n; НОД(m, 0) = m; НОД(m, m) = m;
НОД(1, n) = 1; НОД(m, 1) = 1;
Если m, n чётные, то НОД(m, n) = 2*НОД(m/2, n/2);
Если m чётное, n нечётное, то НОД(m, n) = НОД(m/2, n);
Если n чётное, m нечётное, то НОД(m, n) = НОД(m, n/2);
Если m, n нечётные, то НОД(m, n) = НОД(n, |m - n|).
Если да... То как в данном конкретном случае работает рекурсия? Вполне понимаю как устроен алгоритм. Но КАК это выполняется в рекурсии - не доходит. Может потому что ночь...

Добавлено через 25 минут
Хотя алгоритм тоже не всецело ясен...

Добавлено через 27 минут
Понял как вычисляется рекурсией, если НОД 1 (то есть числа вообще несопоставимы)... Но в некоторых аспектах. Иногда вижу числа, которые просто-напросто не понимаю откуда берутся...

Добавлено через 17 минут
Понял по поводу двух четных относительно. Остались некоторые непонятки.
Понял относительно двух нечетных. Но так же остались некоторые непонятки

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