W C++17 można to zrobić w następujący sposób:
#include <iostream>
#include <array>
using std::cout;
using std::array;
void print( const auto& data )
{
static auto iter {data.cbegin()};
auto iter_local {iter};
if( iter++ == data.cend() ) return;
print( data );
cout << *iter_local << ' ';
}
int main()
{
print( array{1,2,3,4,5,6,7,7,7,7} );
return 0;
}
Na tym przykładzie możesz zobaczyć jaka powinna wyglądać struktura funkcji rekurencyjnej. W Twoim przypadku będziesz musiał pozbyć się zmiennej statycznej na rzecz dodatkowego argumentu funkcji, oraz przy zamianie std::array na zwykłą tablicę podać jej wielkość (jako następny dodatkowy argument).