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

Алгоритм Евклида с использованием рекурсии - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.96
nekogdamne
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 7
04.07.2010, 10:45     Алгоритм Евклида с использованием рекурсии #1
Моя реализация алгоритма Евклида с использованием рекурсивной функции.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//Program finds greatest common divisor of two natural numbers.
#include <iostream>
using namespace std;
 
int GCD(int number1, int number2);
 
int main()
{
    int numb1, numb2, min, max, div;
 
    cout << "Enter the first number: ";
    cin >> numb1;
 
    cout << "Enter the second number: ";
    cin >> numb2;
 
    if (numb1 > numb2)
        {
            max = numb1;
            min = numb2;
        }
 
    else
        {
            min = numb1;
            max = numb2;
        }
 
        div = GCD(min, max);
        cout << "Greatest common divisor is: " << div;
 
    return 0;
}
 
int GCD(int min, int max)
{
    int temp, mod;
 
    mod =  max % min;
 
    if (mod == 0)
        return min;
 
    else
        temp = min;
        min = mod;
        max = min;
 
        GCD(min, max);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2010, 10:45     Алгоритм Евклида с использованием рекурсии
Посмотрите здесь:

Необычный алгоритм Евклида C++
C++ Алгоритм Евклида
Алгоритм Евклида + системы счисления C++
C++ алгоритм евклида
Алгоритм Евклида C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pannaruto
 Аватар для pannaruto
11 / 11 / 2
Регистрация: 12.05.2010
Сообщений: 29
04.07.2010, 11:21     Алгоритм Евклида с использованием рекурсии #2
Например
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
int GCD( unsigned int num1, unsigned int num2 )
{
    if( num1 == 0 ) return num2;
    return GCD( num2 % num1, num1 );
}
 
int main()
{
    cout << "GCD(3,5)" << GCD(3,5) << endl;
    cout << "GCD(4,6)" << GCD(4,6) << endl;
    cout << "GCD(6,4)" << GCD(6,4) << endl;
 
    system("pause");
}
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
04.07.2010, 11:23     Алгоритм Евклида с использованием рекурсии #3
C++
1
2
3
4
int gcd(int x, int y)
{
        return y ? gcd(y,x%y) : x;
}
nekogdamne
1 / 1 / 0
Регистрация: 30.06.2010
Сообщений: 7
04.07.2010, 14:44  [ТС]     Алгоритм Евклида с использованием рекурсии #4
Извините, допустил ошибку в теле функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int GCD(int min, int max)
{
    int mod;
 
    mod = max % min;
    cout << max << " % " << min << " = " << mod << endl;
 
    if (mod == 0)
        return min;
 
    else
        max = min;
        min = mod;
 
        GCD(min, max);
}
Полный код программы
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//Greatest common divisor. This piece of shi... code works well now.
#include <iostream>
using namespace std;
 
int GCD(int number1, int number2);
 
int main()
{
    char c = 'y';
    while(c == 'y')
    {
    int numb1, numb2, min, max, gcd;
 
    cout << "Enter the first number: ";
    cin >> numb1;
 
    cout << "Enter the second number: ";
    cin >> numb2;
 
    if (numb1 > numb2)
        {
            max = numb1;
            min = numb2;
        }
 
    else
        {
            min = numb1;
            max = numb2;
        }
 
        gcd = GCD(min, max);
        cout << "Greatest common divisor is: " << gcd << endl;
 
    cout << "Do you want to find GCD of another two numbers?\n";
    cout << "Press 'Y' for 'yes' or any other key to exit.\n";
    cin >> c;
 
    if (c == 'Y')
        c = 'y';
    }
    return 0;
}
 
int GCD(int min, int max)
{
    int mod;
 
    mod = max % min;
    cout << max << " % " << min << " = " << mod << endl;
 
    if (mod == 0)
        return min;
 
    else
        max = min;
        min = mod;
 
        GCD(min, max);
}
Yandex
Объявления
04.07.2010, 14:44     Алгоритм Евклида с использованием рекурсии
Ответ Создать тему
Опции темы

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