Объяснить пример с рекурсией - C (СИ)
Формулировка задачи:
#include<stdio.h>
void gg(int a,int b)
{ int i=0;
if(a==20)
return;
printf("%d\n",a);
printf("%d\n",b);
gg(a+1,b-1);
gg(a+1,b);
}
void main()
{
gg(16,10);
}Решение задачи: «Объяснить пример с рекурсией»
textual
Листинг программы
#include<stdio.h>
void gg(int a,int b)
{
int i=0;
if(a<=20)
return;
printf("%d\n",a);
printf("%d\n",b);
gg(a+1,b-1);
gg(a+1,b);
}
void main()
{
gg(16,10);
}
Объяснение кода листинга программы
В этом коде используется рекурсия для вывода чисел от 1 до 20.
- В функции
ggесть два параметраaиb, которые представляют собой начальные значения для итераций. - Если
aменьше или равно 20, функция завершается и ничего не делает. - Если
aбольше 20, функция выводит значениеaи значениеb, а затем вызывает саму себя дважды, уменьшив значениеbна 1 и увеличив значениеaна 1. Это продолжается до тех пор, покаaне станет равным 20. - В функции
mainвызывается функцияggс аргументами 16 и 10. - Функция
ggвызывает себя дважды, сначала с аргументами 16 и 9, затем с аргументами 16 и 10. - Процесс продолжается, пока
aне станет равным 20. - Когда
aстановится равным 20, процесс завершается и программа выводит число 20. Список вызовов функцииgg: gg(16,10)gg(16,9)gg(16,8)gg(16,7)gg(16,6)gg(16,5)gg(16,4)gg(16,3)gg(16,2)gg(16,1)gg(17,1)gg(17,2)gg(17,3)gg(17,4)gg(17,5)gg(17,6)gg(17,7)gg(17,8)gg(17,9)gg(17,10)