Если n
равно нулю (или меньше), оно ничего не делает, поэтому рекурсия останавливается.Если n
> 0, то он печатает a[0]
и рекурсивно вызывает себя с n-1
для n
(так что при выполнении рекурсии он переходит к 0) и &a[1]
для a
, т.е. он увеличивает указательa
в каждом рекурсивном вызове.Помните, что аргумент массива в C является синтаксическим сахаром для аргумента указателя.
Итак, отправленный вами код эквивалентен:
void print(int *a, int n)
{
if (n > 0) {
printf("%d\n", *a);
print(a+1, n-1);
}
}