Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335

Рекурсия функции. Цикл выполнения

19.03.2020, 15:31. Показов 869. Ответов 12

Студворк — интернет-сервис помощи студентам
int main(коллеги, знаю замучал Вас уже)
{

Вот небольшой примерчик из книги Стивена Прата, кое что убрал, кое что добавил.
Попросил бы если не сложно проверить мои комментарии, все ли я верно понимаю?
Пример с факториалом, для меня пока сложный, его отложил, попробую пока так разобраться.

Особенно интересуют строки - 28, 30


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
///  рекурсивная функция. дублируем строку   n - раз
 
#include <windows.h>
#include <iostream>
using namespace std;
 
    void coundown(int n);      // объявление функции с аргументом - n
 
int main()
{
system("chcp 1251>0");
 
 
    cout << "\n сколько раз напечатать - привет ? ";
    int n = 0;
    cin >> n;                  // количество вызовов функции
 
    coundown(n-1);             // вызов рекурсивной функции  (n-1) - количество вызовов
 
system("pause>0");
return 0;
}
 
void coundown(int n)           // определение функции с аргументом - n
{
    cout << " привет \n";      // печатает при первом проходе от (n до 0)
 
    if (n > 0)                 // условие для вызова функции, функция вызывается пока (n больше 0), дальше начинается обратный проход от 0 до n
 
    coundown(n-1);             // функция вызывает сама себя, с шагом = 1   (n-1) - "итератор", можно регулировать шаг, например - (n-4) шаг = 4
 
    // ----------------------- // граница между первым и вторым проходом функции
 
    cout << " пока \n";        // печатает при втором проходе от (0 до n)
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.03.2020, 15:31
Ответы с готовыми решениями:

Рекурсия порядок выполнения операторов
void m(arr,n) { if(n==1) return; for(int i=0;i&lt;n;i++) {//операторы m(arr,n-1); //операторы } Как тут будут выполняться...

Рекурсия: каков порядок выполнения?
Не понимаю каков будет порядок действий в функции допустим когда(level =2). По тому как я понял работает рекурсия, когда начнется алгоритм...

Рекурсия через цикл
Вычислить y = x^n по следующему правилу: y = ( x^(n/2) )^2, если n четное и y = x * y^(n–1), если n нечетное Как решить сию задачу...

12
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
19.03.2020, 15:39  [ТС]
Сорри результ не прикрепил!
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
19.03.2020, 15:43
R_U_S_V,
не очень понятно что вы называете первым проходом а что вторым?

Добавлено через 45 секунд
возврат из рекурсии или может у вас какое то другое представление обо всем этом?
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
19.03.2020, 15:47  [ТС]
Цитата Сообщение от Undisputed Посмотреть сообщение
не очень понятно что вы называете первым проходом а что вторым?
Насколько я смог понять, функция вызывается не 5 раз допустим а 10, только первые 5 она работает с аргументом от 5 до 0, а потом наоборот. Ну как-то так вроде...
Не уверен конечно.
ОБРАТНЫЙ проход конечно же! Не второЙ!
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
19.03.2020, 16:00
R_U_S_V,
Нет, в данном случае количество вызовов равно 5
Просто когда происходит рекурсивный вызов, в месте где функция вызывает сама себя происходит остановка первого вызова и код который печатает "пока" не выполнится до тех пор пока не отработает второй вызов и так продолжается до тех пор пока в каком то из вызовов мы проскочим условие, попадая в которое функция вызывает себя. А раз условие проскочили, то в этом вызове (последнем) уже очередь до печати "пока" доходит. Последний вызов таким образом завершается не вызывая больше самого себя. А кто вызывал последний раз функцию? Правильно, это был предпоследний вызов. Поэтому предпоследний вызов продолжает выполнение с момента рекурсивного вызова и тоже печатает "пока" так как он дождался завершения последнего вызова и так возвращаемся вплоть до самого первого вызова.

Думаю с кодом было бы понятнее, но увы пишу с телефона и очень не удобно писать код.
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
19.03.2020, 16:18  [ТС]
Цитата Сообщение от Undisputed Посмотреть сообщение
Думаю с кодом было бы понятнее, но увы пишу с телефона и очень не удобно писать код.
Да что Вы, итак шикарно! Остается только вникнуть...
Ну в целом, то вроде верно у меня там все? Могу сливать в библиотеку?
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,679
19.03.2020, 16:22
Цитата Сообщение от Undisputed Посмотреть сообщение
Думаю с кодом было бы понятнее
немного модернизируем функцию void countdown(int n)
C++
1
2
3
4
5
6
7
void coundown(int n)
{
    cout << "глубина = " << n << " - привет \n";
    if (n > 0)
    coundown(n-1);
    cout << "глубина = " << n << " - пока \n";
}
Вывод программы при n = 5:
Code
1
2
3
4
5
6
7
8
9
10
11
12
глубина = 5 - привет
глубина = 4 - привет
глубина = 3 - привет
глубина = 2 - привет
глубина = 1 - привет
глубина = 0 - привет
глубина = 0 - пока
глубина = 1 - пока
глубина = 2 - пока
глубина = 3 - пока
глубина = 4 - пока
глубина = 5 - пока
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
19.03.2020, 16:26  [ТС]
Цитата Сообщение от Annemesski Посмотреть сообщение
немного модернизируем функцию
Да, в книге это тоже было отражено, для наглядности происходящего
я просто потом убрал
0
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
19.03.2020, 16:28  [ТС]
Вот еще на эту тему картинка

Насколько я понял это некая альтернатива циклам. Хотя пишут, что незаменимая вещь в реализации искусственного интеллекта
0
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
19.03.2020, 16:32
R_U_S_V,
В целом комментарии похожи на правду

Добавлено через 17 секунд
R_U_S_V,
В целом комментарии похожи на правду
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
19.03.2020, 16:37  [ТС]
Цитата Сообщение от Undisputed Посмотреть сообщение
В целом комментарии похожи на правду
Спасибо, ну хоть так. С математическими вариантами буду уже походу разбираться...
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,679
19.03.2020, 16:54
R_U_S_V, так вот откуда вы этот "обратный проход" взяли - отвратительная формулировка. Это выход из рекурсии, который тоже рекурсивен: сколько было вызовов (входов) - столько же будет и выходов.
Цитата Сообщение от R_U_S_V Посмотреть сообщение
Насколько я понял это некая альтернатива циклам
альтернатива, крайне удобная вещь для различных многосвязанных контейнеров данных, например древовидных структур, крайне удобная вещь для обхода всех поддиректорий в заданной директории, много для чего можно применить.
0
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
19.03.2020, 17:00  [ТС]
Цитата Сообщение от Annemesski Посмотреть сообщение
так вот откуда вы этот "обратный проход" взяли - отвратительная формулировка
Да, все из книжек! Другого пока нет, на курсы пока стремлюсь, хотя их было в моей жизьни не мало!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.03.2020, 17:00
Помогаю со студенческими работами здесь

Возможна ли рекурсия или цикл?
Можно ли реализовать такой пример? (циклически и рекурсивно) Пример Задачу надо переносит в текст сообщения!

Рекурсия vs цикл с точки зрения производительности
Здравствуй, дорогой форум! Написал алгоритм для отображения десятичных чисел в двоичной системе в двух вариантах: с использование...

Рекурсия на всех путях выполнения, функция вызовет переполнение стека
Возникла проблема с переполнением стека, прошу помочь. Заранее благодарен #include &quot;stdafx.h&quot; #include &lt;math.h&gt; ...

Рекурсия VS Цикл
Пытаюсь для себя усвоить область рационального применения рекурсии. Требуется помощь. Давайте рассмотрим на примере некого ряда с...

Цикл + рекурсия
Суть в чём: нужно подсчитать кол-во членов, больших введенного Е, и их сумму. Вроде, всё правильно написано, но (как всегда) не работает....


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru