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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
undertacker
9 / 9 / 0
Регистрация: 28.04.2013
Сообщений: 55
#1

рекурсия - C++

28.04.2013, 16:31. Просмотров 363. Ответов 3
Метки нет (Все метки)

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
#include <iostream>
#include <windows.h>
using namespace std;
 
void someFunction ( int [], int, int );
 
int main ()
{
 
 const int arraySize = 10;
 int a[arraySize] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 cout << "The values in the array are:" << endl;
 someFunction( a, 0, arraySize );
 cout << endl;
 
 system ("Pause void");
 return 0;
     
}
 
void someFunction ( int b[], int current, int size )
{
        if ( current < size )
        {  
        someFunction ( b, current + 1, size ); // не пойму как работает 
        cout << b[ current ] << " " << endl;
        } 
}
Вообщем вопрос таков:
1 как работает эта рекурсия
2 причем тут current + 1
3 почему выводится массив в обратном порядке, если с начало b [ current ] = b[ 1 ] = 2
заранее спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2013, 16:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос рекурсия (C++):

Рекурсия - C++
Вот какой самый простой пример рекурсии я обнаружил в интернете: #include &lt;iostream&gt; using namespace std; int factorial(int n) { ...

Рекурсия - C++
Есть задача, написал решение но ответ неправильный. Задача: Решение: #include &lt;iostream&gt; using namespace std; int a, n, m, t,...

Рекурсия - C++
Сделайте одну програмку используя рекурсию. Очень нужно... Срочно. 1. Реализовать поиск НОД; 2. Возвести число в целую степень; ...

Рекурсия - C++
Доброго времени суток! (Рекурсия). Вычислить сумму: Заранее спасибо!

Рекурсия - C++
Сегодня баловался с рекурсией. получилось типа цикла, только из функции #include &lt;iostream&gt; using namespace std; unsigned...

Рекурсия!!!! - C++
Доброго времени суток!!! В С++ полный нуб.... маюсь не первый день с такой задачкой: Напишите рекурсивную подпрограмму вычисления...

3
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
28.04.2013, 17:05 #2
undertacker, если хотите вот более понятный пример

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
#include <iostream>
#include <windows.h>
using namespace std;
 
void someFunction ( int [], int, int );
 
int main ()
{
 
 const int arraySize = 10;
 int a[arraySize] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 cout << "The values in the array are:" << endl;
 someFunction( a, arraySize - 1, arraySize );
 cout << endl;
 
 system ("Pause void");
 return 0;
     
}
 
void someFunction ( int b[], int current, int size )
{
        if ( current >= 0 )
        {  
            cout << b[ current ] << " " << endl;
            someFunction ( b, current - 1, size ); 
        } 
}
а вообще current - 1 нужен для перехода к следующему элементу и естественное чтобы знать до каких пор выполнять рекурсию Но в первом случае мы сначала идем до конца массива а потом уже выводим значения, вот и получается что выводим с конца)
1
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
28.04.2013, 17:07 #3
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
someFunction(a, 0, arraySize);
 
/* b => a, current => 0, size => arraySize */
if (current < size)
{  
    someFunction (b, current + 1, size);
    cout << b[current] << " " << endl;
}
 
if (0 < arraySize)
{  
    someFunction (a, 0 + 1, arraySize);
    cout << a[0] << " " << endl;
}
 
if (0 < arraySize)
{  
    /* b => a, current => 0 + 1 = 1, size => arraySize*/
    if (current < size)
    {
        someFunction(b, current + 1, size);
        cout << b[current] << " " << endl;
    }
    cout << a[0] << " " << endl;
}
 
if (0 < arraySize)
{  
    if (1 < arraySize)
    {
        someFunction(a, 1 + 1, arraySize);
        cout << a[1] << " " << endl;
    }
    cout << a[0] << " " << endl;
}
 
// ...
 
if (0 < arraySize)
{  
    if (1 < arraySize)
    {
        if (2 < arraySize)
        {
            if (3 < arraySize)
            {
                if (4 < arraySize)
                {
                    if (5 < arraySize)
                    {
                        if (6 < arraySize)
                        {
                            if (7 < arraySize)
                            {
                                if (8 < arraySize)
                                {
                                    if (9 < arraySize)
                                    {
                                        if (10 < arraySize)
                                        {
                                            someFunction(a, 10 + 1, arraySize);
                                            cout << a[10] << " " << endl;
                                        }
                                        cout << a[9] << " " << endl;
                                    }
                                    cout << a[8] << " " << endl;
                                }
                                cout << a[7] << " " << endl;
                            }
                            cout << a[6] << " " << endl;
                        }
                        cout << a[5] << " " << endl;
                    }
                    cout << a[4] << " " << endl;
                }
                cout << a[3] << " " << endl;
            }
            cout << a[2] << " " << endl;
        }
        cout << a[1] << " " << endl;
    }
    cout << a[0] << " " << endl;
}
Вот именно поэтому стоит читать SICP.
1
undertacker
9 / 9 / 0
Регистрация: 28.04.2013
Сообщений: 55
28.04.2013, 18:59  [ТС] #4
yoghurt92, Во! Спасибо большое, теперь понял
0
28.04.2013, 18:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2013, 18:59
Привет! Вот еще темы с ответами:

Рекурсия - C++
Помогите написать рекурсию. Задание прилагаю

Рекурсия - C++
Есть такой код. В нем рисуется что то вроде линейки. Данный код предназначен для иллюстрации работы рекурсии. Может мне кто нибудь...

Рекурсия - C++
Привет. Только что узнал,что такое рекурсия и понял как она работает,но написать участок кода с рекурсией мозгов не хватает. Нужно...

рекурсия - C++
Доброго времени суток. Уважаемые ГУРУ, есть одна проблема. Ниже представлен код, в котором параметр b должен быть всегда...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru