(базовая) рекурсивная функция должна состоять из двух частей - базового случая, где вся работа уже выполнена или почти выполнена, и все, что нам нужно сделать, это очистить и вернуть, и рекурсивного случая, где нам нужно выполнить небольшую часть работы, а затем передать остальную часть функции рекуссии.
Базовый случай здесь довольно прост, и вы уже поняли это правильно. if(length <= 0)
, все, что у нас осталось, это пустой массив, поэтому мы можем просто вернуться и закончить. Больше нет работы.
Рекурсивный случай немного сложнее, и он у вас почти есть!
В нашем рекурсивном случае в этой задаче должен быть напечатан первый элемент, а затем передан массив, который на один короче и запускается на один элемент позже. Также обратите внимание, что вы никогда не используете возвращаемое значение, и, поскольку это функция печати, она, вероятно, должна быть void
. С этими исправлениями код может выглядеть следующим образом:
int arr_print(int *arr,int len){
//base case: if arr is empty, we're done
if(len <= 0) { return; }
//recursive case: print first element, then pass array along to print rest
cout << *arr << endl;
arr_print(arr + 1, len - 1);
}