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

Почему в данной рекурсивной функции после выполнения всех функций у нас каждая возвращает 0?

19.10.2023, 23:20. Показов 649. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include <iostream>
using namespace std;
int Foo (int a)
{
    if (a < 1)
        return 0;
    a--;
    cout << a << endl;
 
 
     return Foo (a);
}
 
  
 
 
 
int main()
{
    setlocale(LC_ALL, "RUS");
    
 
    Foo(5);
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2023, 23:20
Ответы с готовыми решениями:

После выполнения одной из функций другие функции перестают работать
Создать массив структур&quot;Пациенты&quot; с полями &quot;Имя&quot;, &quot;Температура&quot;. &quot;Пульс&quot;, &quot;Вес&quot;. Отсортировать введенный список по выбранному полю, и...

Почему зацикливается программа после выполнения функции загрузки?
Вот моя функция, после её выполнения программа зацикливается. ITEM* zagruzka(ITEM *head) { ITEM *cur; FILE *f; ...

Почему после выполнения функции 1, бот останавливается и не вызывает функцию 2
При запуске локально на PyCharm, бот добавляет данные в БД SQLite3 и модерирует комментарии к публикации. Но, после загрузки на VPS,...

6
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.10.2023, 23:31
Внятно сформулируй.
0
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
20.10.2023, 00:50
Ибо функция возвращает функцию, пока аргумент, переданный в неё > 0, как только передающийся аргумент достигает 0 она начинает возвращать 0.
foo(5) -> foo(4) -> foo(3) -> foo(2) -> foo(1) -> foo(0)
0 <- 0 <- 0 <- 0 <- 0 <- 0
Я бы кнчн не понял, что я тут написал, но вдруг вы поймёте
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12943 / 6810 / 1821
Регистрация: 18.10.2014
Сообщений: 17,235
20.10.2023, 04:44
Цитата Сообщение от Drakonim Посмотреть сообщение
почему в данной рекрусивной функции после выполнения всех функций у нас каждая возвращает 0
Потому что они больше ничего не могут возвращать. В этой функции всего два return. Один явно возвращает 0. Другой возвращает результат рекурсивного вызова, никак не меняя этот результат. Откуда тут может возникнуть не 0?
1
0 / 0 / 0
Регистрация: 25.05.2023
Сообщений: 18
20.10.2023, 17:57  [ТС]
кароче не понимаю как в этой функции работает стек алгоритм вот функция вызывается и принимает значение 5 в ней она выводит 4 3 и тд потом у нас работает условие в котором последняя функция возвращает 0 но что происходит после этого с другими функциями почему они все возвращают 0 типо после последней функции у нас работает стек алгоритм и мы движимся вверх и поэтому например функция со значением 1 теперь будет возваращать 0 потому что последняя функция возвратила 0 и тд я правильно понял?
0
 Аватар для vlisp
1064 / 985 / 153
Регистрация: 10.08.2015
Сообщений: 5,377
20.10.2023, 19:29
В 6 строке возвращаешь ноль и не понимаешь откуда... тебе точно надо в программирование?
0
Странный типчик
 Аватар для Anonim4ik
44 / 8 / 2
Регистрация: 29.01.2020
Сообщений: 51
20.10.2023, 19:44
Лучший ответ Сообщение было отмечено Drakonim как решение

Решение

Здравствуйте, перед тем как обращаться на форум необходимо чётко сформулировать свою мысль, чтобы другие пользователи смогли вам помочь.

В вашей функции Foo(int a) происходит проверка, целочисленное число a меньше 1, если оно меньше, то функция возвратит 0. Также в вашей функции присутствует постдекрементация (в данном случае она просто уменьшает число на единицу), после этого функция вызовет саму себя с вычисленным значением a.

Разберём работу программы на примере, вызовем функцию Foo и в качестве параметра передадим туда число 3, число 3 больше единицы, поэтому функция продолжит своё выполнение, 3-- = 2, функция вызовет саму себя (Foo), но в качестве параметра передаст туда уже число 2.

Теперь рассмотрим интересную ситуацию, которая, как я полагаю, и вызвала у вас некоторые вопросы.
Вызовем функцию Foo и в качестве параметра передадим туда число 1, число 1, как ни странно, НЕ меньше единицы (В ДАННОМ СЛУЧАЕ, для программы 1 будет больше единицы), поэтому функция продолжит своё выполнение 1-- = 0, функция вызовет саму себя (Foo), но в качестве параметра передаст туда уже число 0. Продолжим, число 0 меньше единицы, поэтому функция прекратит своё выполнение и вернёт значение 0.

Прикрепил к сообщению блок-схему вашей программы. Надеюсь, я вам помог разобраться в вашем нелёгком вопросе!
Миниатюры
Почему в данной рекурсивной функции после выполнения всех функций у нас каждая возвращает 0?  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.10.2023, 19:44
Помогаю со студенческими работами здесь

Какова последовательность выполнения рекурсивной функции?
Хотел бы знать подробно, действия интерпретатора при обработке рекурсивной функции. например, та же функция нахождения факториала: ...

Разработать программу по алгоритму с использование рекурсивной функции и без использования рекурсивной функции
Разработать программу по алгоритму с использование рекурсивной функции и без использования рекурсивной функции.

Что выведется на экран после выполнения данной программы?
main() { int i,c; char input=&quot;tratata2\3\141ZW\1hopa&quot;; for(i=2;(c=input)!='\0';i++) { switch(c) { case 'a': putchar('i');...

С помощью рекурсивной функции рассчитать сумму всех двохзначних чисел
С помощью рекурсивной функции рассчитать сумму всех двохзначних чисел

Найти произведение всех элементов массива с помощью рекурсивной функции
помогите пожалуйста, необходимо найти произведение всех элементов массива с помощью рекурсивной функции вот мой код программы, но она не...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru