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

Не могу сообразить рекурсию - C++

Восстановить пароль Регистрация
 
VisualNIK
 Аватар для VisualNIK
8 / 8 / 1
Регистрация: 29.10.2012
Сообщений: 168
07.04.2013, 09:44     Не могу сообразить рекурсию #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
1
     4
         13
         14
         15  
     5
         16
         17
         18
     6
         19
         20
         21
2
     7
         22
         23
         24
     8
         25
         26
         27
     9
         28
         29
         30
 
3
    10
         31
         32
         33
    11
         34
         35
         36
    12
         37
         38
         39
и так далее. Спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
07.04.2013, 10:07     Не могу сообразить рекурсию #2
nvdrossii, не вижу логики где 11, 12?Мнемосхема вывода точно верна?
VisualNIK
 Аватар для VisualNIK
8 / 8 / 1
Регистрация: 29.10.2012
Сообщений: 168
07.04.2013, 10:20  [ТС]     Не могу сообразить рекурсию #3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
nvdrossii, не вижу логики где 11, 12?Мнемосхема вывода точно верна?
Там ниже прокрутить и будет 11 и 12... мне это нужно для нумерации разметок в сети петри (если знакомо)...
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.04.2013, 14:56     Не могу сообразить рекурсию #4
nvdrossii, вам нужно именно рекурсию ? ведь, это можно и в цикле.
VisualNIK
 Аватар для VisualNIK
8 / 8 / 1
Регистрация: 29.10.2012
Сообщений: 168
07.04.2013, 14:58  [ТС]     Не могу сообразить рекурсию #5
Цитата Сообщение от Ternsip Посмотреть сообщение
nvdrossii, вам нужно именно рекурсию ? ведь, это можно и в цикле.
Да! видите в чем дело, ведь задается ещё и глубина, которая определяет до какого момента мы продолжаем вот так разбивать....в сетях Петри как раз таки задается глубина дерева...здесь я для примера кинул с глубиной до 3...или до 2-ух там в зависимости от реализации...
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.04.2013, 15:00     Не могу сообразить рекурсию #6
nvdrossii, тут не ясна логика разбиения скажите конкретнее как она разбивается, если глубина, например, 5
VisualNIK
 Аватар для VisualNIK
8 / 8 / 1
Регистрация: 29.10.2012
Сообщений: 168
07.04.2013, 15:09  [ТС]     Не могу сообразить рекурсию #7
Цитата Сообщение от Ternsip Посмотреть сообщение
nvdrossii, тут не ясна логика разбиения скажите конкретнее как она разбивается, если глубина, например, 5
Я написал программу, она разметки(M[i]) нумерует следующим образом: //на рисунке с Memo//
А в универе на лабораторной мы нумеровали вот так: //рисунок с листком//

Вот я подумывал тут попробовать снумеровать как в классе, что бы уже было не придраться...да и как видно повторяющиеся разметки нумеруются той же цифрой что и была самая первая, и по этой(повторяющейся ветви) дальше дерево не раскрывается, ибо незачем ещё раз ту же ветвь изображать
Миниатюры
Не могу сообразить рекурсию   Не могу сообразить рекурсию  
ya_noob
_
200 / 144 / 9
Регистрация: 08.10.2011
Сообщений: 432
07.04.2013, 15:43     Не могу сообразить рекурсию #8
Цитата Сообщение от nvdrossii Посмотреть сообщение
Здравствуйте...помогите пожалуйста с рекурсией...мне это нужно для другой работы но я решил взять пример полегче
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <iomanip>
using namespace std;
 
void fun( int d, int n = 1, int s = 5 )
{
    if ( d <= 0 ) return;
 
    for ( int t = 0; t < 3; ++t )
    {
        cout << setw( s ) << n + t << endl;
        fun( d - 1, ( n + t ) * 3 + 1, s + 5 );
    }
}
 
int main()
{
    fun( 3 );
 
    return 0;
}
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.04.2013, 15:46     Не могу сообразить рекурсию #9
nvdrossii, вам рекурсия int calc( int number) должна возвращать номер вершины как на картинке, если number это номер строки ?

Добавлено через 1 минуту
ya_noob,
Цитата Сообщение от ya_noob Посмотреть сообщение
for ( int t = 0; t < 3; ++t )
* * {
наверное
for ( int t = 0; t < d; ++t )

Добавлено через 28 секунд
Цитата Сообщение от ya_noob Посмотреть сообщение
fun( d - 1, ( n + t ) * 3 + 1, s + 5 );
fun( d - 1, ( n + t ) * d + 1, s + 5 );
ya_noob
_
200 / 144 / 9
Регистрация: 08.10.2011
Сообщений: 432
07.04.2013, 15:48     Не могу сообразить рекурсию #10
Цитата Сообщение от Ternsip Посмотреть сообщение
наверное
for ( int t = 0; t < d; ++t )
наверное вам стоило запустить программу прежде чем исправлять ее. Она выдает то, что требовалось в первом посте

Это же heap, только не на 2 узлах, а на 3
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.04.2013, 16:02     Не могу сообразить рекурсию #11
Добавлено через 10 минут
nvdrossii, разве нужно дерево на трёх узлах ? мне кажется тут надо дерево из n узлов

Добавлено через 1 минуту
ya_noob, если только 3 узла и глубиной n, то вы правы.
ya_noob
_
200 / 144 / 9
Регистрация: 08.10.2011
Сообщений: 432
07.04.2013, 16:13     Не могу сообразить рекурсию #12
я имел ввиду, что у каждого узла по 3 потомка
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.04.2013, 16:16     Не могу сообразить рекурсию #13
ya_noob, ну я вас понял, вы сказали, что от каждого узла ещё 3 узла отходит. В таком случае всё просто и всё правильно)
VisualNIK
 Аватар для VisualNIK
8 / 8 / 1
Регистрация: 29.10.2012
Сообщений: 168
07.04.2013, 16:42  [ТС]     Не могу сообразить рекурсию #14
ya_noob,
Ternsip,
Спасибо большое вам!! Сейчас буду думать как себе вмонтировать сие творение)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2013, 12:40     Не могу сообразить рекурсию
Еще ссылки по теме:

Не могу сообразить как подружить свой класс с fileoutputstream C++
C++ Не могу сообразить как написать
C++ не могу сообразить процесс или предпроцесс это

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

Или воспользуйтесь поиском по форуму:
VisualNIK
 Аватар для VisualNIK
8 / 8 / 1
Регистрация: 29.10.2012
Сообщений: 168
12.04.2013, 12:40  [ТС]     Не могу сообразить рекурсию #15
Ternsip,
А вот с этим не поможете?:
Сети Петри
не могу все таки высобразить нумерацию дерева в этой рекурсии...я там просто написал пост(он один там), но ответа нету, что бы снова не писать и тему не создавать заново
Yandex
Объявления
12.04.2013, 12:40     Не могу сообразить рекурсию
Ответ Создать тему
Опции темы

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