Подсчитать количество вызовов рекурсии - C (СИ)
Формулировка задачи:
нужно цикл for сделать через рекурсию и подсчитать количество вызовов рекурсии
#include<stdio.h>
int root(int a)
{
int s = 0;
while(a > 0)
{
s += a % 10;
a /= 10;
}
if(s > 9) return root(s);
else return s;
}
int main(){
int m=10, n=0;
char snum[100];
while(1) {
printf("Enter a number: ");
gets(snum);
int num = 0;
char *temp;
for (temp = snum; *temp != '\0'; temp++)
{
if (*temp > 47 && *temp < 58)
{
n += ((int)*temp) - 48;
}
else
{
printf("Wrong input!!!\n");
break;
}
}
if (*temp =='\0') break;
}
printf("%d", root(n));
return 0;
}Решение задачи: «Подсчитать количество вызовов рекурсии»
textual
Листинг программы
int main(int argc, char ** argv) {
if ( *(argv[1]) ) {
argc = *(argv[1]) - '0';
argv[1]++;
return argc + main(argc, argv);
}
else
return 0;
}
Объяснение кода листинга программы
В этом коде выполняется подсчет количества вызовов функции main. Список элементов, описывающих выполнение кода, выглядит следующим образом:
- Входные данные: argc (количество аргументов, переданных функции main) и argv (указатель на массив аргументов, переданных функции main).
- Проверка наличия первого аргумента (*(argv[1])). Если он есть, то выполняется следующее действие.
- Переменная argc изменяется на значение первого аргумента (*(argv[1]) - '0').
- Указатель argv[1] увеличивается на 1.
- Вызывается рекурсивно функция main с аргументами argc и argv.
- Если первого аргумента нет (или он не является числом), то выполняется действие в блоке else.
- В этом блоке возвращается 0, что означает успешный конец работы программы.
- Если первый аргумент есть и он является числом, то возвращается сумма значения argc и результата вызова функции main (рекурсивный вызов). В результате выполнения этого кода будет подсчитано и выведено количество вызовов функции main.