С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 30.07.2010
Сообщений: 6

Вопрос насчёт рекурсии в цикле

18.08.2010, 13:17. Показов 951. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня вопрос насчёт рекурсии в цикле. Вот пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int massiv[3]={1,2,3};
 
int heapPermute(int n){
cout <<"В начале n=" <<n <<' ';
int temp=0;
int razmer = sizeof(massiv)/sizeof(int);
if(n==0) { for(int i=0; i<razmer; i++) { if(i==0) {cout <<endl; }   cout <<massiv[i] <<' ';  } }
else {
    for(int i=0; i<n; i++){
        cout <<"В цикле n=" <<n <<" i="<<i <<endl;
        heapPermute(n-1);
        if(n%2!=0) { temp=massiv[0]; massiv[0]=massiv[n-1]; massiv[n-1]=temp; }
        else { temp=massiv[i]; massiv[i]=massiv[n-1]; massiv[n-1]=temp; }
                           }
     }
 
}
 
int main() {
 
heapPermute(3);
 
}
Непонятно следующее: откуда берутся значения n=2 после печати цифр 1,2,3. Я понимаю так - раз функция закончилась на 0, то она должна вернуться в предедущее состояние (n=1), что она,собственно и делает, но после появления того самого n=2.

P.S. Рекурсия аля числа Фибонначи рисую с помощью двоичного дерева. Функцию факториал - в виде прямой возвращающей число в предыдущий экран. Как можно зарисовать функцию из цикла? Помоги пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.08.2010, 13:17
Ответы с готовыми решениями:

вопрос насчет БП!!!
пол года назад купил БП Gigabyte superb 460w,2 дня назад он стал издавать ультразвук,сегодня появился еще один странный звук(как будто...

Вопрос насчет SpeedButton
Видел в книжке пример, в котором кнопки рассматривались как массив,при этом они создавались в результате работы программы...Как объединить...

Вопрос насчет уникальности
Добрый вечер У меня такой вопрос, есть сайт где размешена уникальные статьи, (50-80 шт) свое время их яндекс индексировал но потом...

4
13 / 13 / 1
Регистрация: 27.02.2010
Сообщений: 46
18.08.2010, 23:16
Вот таже программа но с подправленым выводом.
Больше всего ине понравился конечный результат

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
#include <iostream>
#include <cstdio>
using namespace std;
int massiv[3]={1,2,3};
 
int heapPermute(int n)
{
  cout <<"В начале n=" << n << endl;
  int temp=0;
  int razmer = sizeof(massiv)/sizeof(int);
  if(n==0) { 
    for(int i=0; i<razmer; i++) 
    { 
      if(i==0) 
      {
    cout <<endl;
      }
      cout <<massiv[i] <<' ';  
    }
    cout << " n=0";
    cout << endl;
      }
  else 
  {
    for(int i=0; i<n; i++)
    {
     
      heapPermute(n-1);
      if (n%2!=0)
      {
    temp=massiv[0]; 
    massiv[0]=massiv[n-1]; 
    massiv[n-1]=temp;
    cout <<"В цикле n=" <<n <<" i="<< i <<endl;
    cout << "Поменяли местами элементы " << 0 << " " << n-1 << endl;
    for(int j=0; j<razmer; j++) 
    { 
      cout <<massiv[j] <<' ';  
    }
    cout << endl;
    
      } 
      else 
      {
    temp=massiv[i]; 
    massiv[i]=massiv[n-1];
    massiv[n-1]=temp;
    cout <<"В цикле n=" <<n <<" i="<<i <<endl;
    cout << "Поменяли местами элементы " << i << " " << n-1 << endl;
    for(int j=0; j<razmer; j++) 
    { 
      cout <<massiv[j] <<' ';  
    }
    cout << endl;
    
      }
       //cout <<"В цикле n=" <<n <<" i="<<i <<endl;
    }
  }
}
 
int main() {
  
  heapPermute(3);
  cout << "После выполнения функции ";
  for(int j=0; j<3; j++) 
    { 
      cout <<massiv[j] <<' ';  
    }
    cout << endl;
  return 0;
 
}
2
0 / 0 / 0
Регистрация: 30.07.2010
Сообщений: 6
19.08.2010, 10:49  [ТС]
Спасибо вам за пример. А теперь, собственно, вопрос к вам. Почему в первом проходе n вовзращается всего лишь до двойки, а в следующий раз проходит до тройки.
1 2 3
В нечётном цикле n=1 i=0
Поменяли местами элементы 0 0
1 2 3
В чётном цикле n=2 i=0
Поменяли местами элементы 0 1
3 2 1
ГДЕ n=3????
Если судить по дереву - 3-2-1-0. 0 вовращается к 1 и ,вроде, должен стать 2, а потом 3, но функция намного больше --> такой метод не подходит. Методом корней и листьев - 3-2-1-0. Лист 0(левый) вернулся к 1 и должен от 1 пойти в правый(0). Этого тоже не происходит.
0
13 / 13 / 1
Регистрация: 27.02.2010
Сообщений: 46
19.08.2010, 18:02
Как-то так:

http://xmages.net/show.php/171... 4-jpg.html
1
0 / 0 / 0
Регистрация: 30.07.2010
Сообщений: 6
19.08.2010, 20:37  [ТС]
Спасибо . Тему можно закрыть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.08.2010, 20:37
Помогаю со студенческими работами здесь

Вопрос насчет рутера
Хочу купить рутер D-Link DIR-615 Слышал бывает такое что когда пользуешься беспроводным подключением в этот момент на стационарном ...

Вопрос насчёт сессии
Моя проблема состоит в следующем: Есть страница (form.php), на которой расположена форма ввода данных с защитным кодом (каптча, код...

Вопрос насчет Form...
Никак не хочет показываться Form2....., т.е. прога ваще не запускается...пишет ошибку: :rtfm: error CS0246: The type or namespace...

Вопрос насчет потока
Всем привет! Не могли бы вы подсказать как запустить поток чтобы он не блокировал выполнение другого потока, что то типа синхронной работы...

Вопрос насчет даты
Как узнать системную дату , потом разложить ее на день,месяц год ,затем присвоить переменным значения... допустим d=29 m=1 ,g=2010


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru