Разобрать рекурсивный код - C (СИ)
Формулировка задачи:
#include <stdio.h> void CntTo3(int); void CntTo2(int); void CntTo1(int); int main() { int n; //1. зачем здесь вообще нужна эта переменная??? CntTo3(3); // 2. что это такое??? Если это функция, то почему ж она не объявлена по-нормальному - void CntTo3 ? Тройка, которая в скобках - это типа аргумент функции (имеется ввиду - это типа int p ? Если это так, то разве можно внутри функции main объявлять это? разве это не надо делать где-нибудь в хэддере? return 0; } void CntTo3(int p) //2. p здесь равно 3, наверно { CntTo2(p-1); //3. p здесь равно 2, опять таки, наверно printf("%d\n",p); } void CntTo2(int p) // 3. p здесь равно уже 2? и почему void - она же возвращает значение, чтобы функция CntTo3 могла работать { CntTo1(p-1); printf("%d\n",p); } void CntTo1(int p) { printf("%d\n",p); }
Решение задачи: «Разобрать рекурсивный код»
textual
Листинг программы
void CntTo3(int p) { CntTo2(p-1); //в этом месте функция CntTo3 должна же вернуть значение 2 в функцию // CntTo2? ВОЗВРАЩАЕТ! printf("%d\n",p); } void CntTo2(int p) { // здесь аргумент уже равен 2??? CntTo1(p-1); printf("%d\n",p); }
Объяснение кода листинга программы
В данном коде присутствуют две функции: CntTo3 и CntTo2.
- Функция CntTo3 принимает целочисленный аргумент p и вызывает функцию CntTo2, передавая ей в качестве аргумента значение p - 1. После этого функция CntTo3 осуществляет вывод значения p с помощью функции printf.
- Функция CntTo2 также принимает целочисленный аргумент p и вызывает функцию CntTo1, передавая ей в качестве аргумента значение p - 1. После этого функция CntTo2 осуществляет вывод значения p с помощью функции printf.
- Функция CntTo1 не представлена в данном коде, поэтому мы не можем сказать, что происходит в этом месте. Таким образом, если мы вызовем функцию CntTo3 с аргументом 3, то она вызовет функцию CntTo2 с аргументом 2, которая в свою очередь вызовет несуществующую функцию CntTo1 с аргументом 1. После чего функция CntTo2 осуществит вывод значения 2, а функция CntTo3 осуществит вывод значения 3. Список действий:
- Вызов функции CntTo3 с аргументом 3.
- Внутри функции CntTo3 вызов функции CntTo2 с аргументом 2.
- Внутри функции CntTo2 вызов несуществующей функции CntTo1 с аргументом 1.
- Внутри функции CntTo2 вывод значения 2.
- Возврат из функции CntTo2.
- Внутри функции CntTo3 вывод значения 3.
- Возврат из функции CntTo3.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д