Вопрос о рекурсивной функции? - PullRequest
3 голосов
/ 24 марта 2011

У меня есть рекурсивная функция из книги C следующим образом:

void print(int a[], int n)
{   if (n<=0)  return ;
     printf("%d\n", a[0]);
     print(&a[1], n-1);
}

Я запустил, и эта функция печатает все элементы указанного массива. Но я действительно не понимаю, как работает эта функция, чтобы я мог печатать все элементы массива. Кто-нибудь может дать мне четкое объяснение, пожалуйста?

Ответы [ 11 ]

0 голосов
/ 24 марта 2011

Если 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...