Разобрать рекурсивный код - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. #include <stdio.h>
  2. void CntTo3(int);
  3. void CntTo2(int);
  4. void CntTo1(int);
  5. int main()
  6. {
  7. int n; //1. зачем здесь вообще нужна эта переменная???
  8. CntTo3(3); // 2. что это такое??? Если это функция, то почему ж она не объявлена по-нормальному - void CntTo3 ? Тройка, которая в скобках - это типа аргумент функции (имеется ввиду - это типа int p ? Если это так, то разве можно внутри функции main объявлять это? разве это не надо делать где-нибудь в хэддере?
  9. return 0;
  10. }
  11. void CntTo3(int p) //2. p здесь равно 3, наверно
  12. {
  13. CntTo2(p-1); //3. p здесь равно 2, опять таки, наверно
  14. printf("%d\n",p);
  15. }
  16. void CntTo2(int p) // 3. p здесь равно уже 2? и почему void - она же возвращает значение, чтобы функция CntTo3 могла работать
  17. {
  18. CntTo1(p-1);
  19. printf("%d\n",p);
  20. }
  21. void CntTo1(int p)
  22. {
  23. printf("%d\n",p);
  24. }
Честно говоря, вообще непонятно как это может работать (хотя, надо признать, работает). Программа считывается сверхну вниз - в функции CntTo3 выполнение дошло до того места, где CntTo2(p-1) - это ж функция определена только ниже так как тогда функция CntTo3 может включать ее в работу. Вопросы дебильные, понимаю. Си недавно только начала учить.

Решение задачи: «Разобрать рекурсивный код»

textual
Листинг программы
  1.  void CntTo3(int p)
  2.  {      CntTo2(p-1); //в этом месте функция CntTo3 должна же вернуть значение 2 в функцию
  3.                            // CntTo2? ВОЗВРАЩАЕТ!
  4.       printf("%d\n",p); }
  5.  
  6.  void CntTo2(int p) { // здесь аргумент уже равен 2???
  7.       CntTo1(p-1);
  8.       printf("%d\n",p); }

Объяснение кода листинга программы

В данном коде присутствуют две функции: CntTo3 и CntTo2.

  1. Функция CntTo3 принимает целочисленный аргумент p и вызывает функцию CntTo2, передавая ей в качестве аргумента значение p - 1. После этого функция CntTo3 осуществляет вывод значения p с помощью функции printf.
  2. Функция CntTo2 также принимает целочисленный аргумент p и вызывает функцию CntTo1, передавая ей в качестве аргумента значение p - 1. После этого функция CntTo2 осуществляет вывод значения p с помощью функции printf.
  3. Функция CntTo1 не представлена в данном коде, поэтому мы не можем сказать, что происходит в этом месте. Таким образом, если мы вызовем функцию CntTo3 с аргументом 3, то она вызовет функцию CntTo2 с аргументом 2, которая в свою очередь вызовет несуществующую функцию CntTo1 с аргументом 1. После чего функция CntTo2 осуществит вывод значения 2, а функция CntTo3 осуществит вывод значения 3. Список действий:
  4. Вызов функции CntTo3 с аргументом 3.
  5. Внутри функции CntTo3 вызов функции CntTo2 с аргументом 2.
  6. Внутри функции CntTo2 вызов несуществующей функции CntTo1 с аргументом 1.
  7. Внутри функции CntTo2 вывод значения 2.
  8. Возврат из функции CntTo2.
  9. Внутри функции CntTo3 вывод значения 3.
  10. Возврат из функции CntTo3.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут