Я уверен, что вам нужно написать программу C или программу на C ++, но с использованием функциональности C из-за вашего объявления "2D-массива", например int **
.:)
Функция может быть легко реализована, если использовать еще одну вспомогательную рекурсивную функцию.
Вот демонстрационная программа
#include <stdio.h>
void display_row( int *a, size_t column )
{
column == 0 ? ( void )putchar( '\n' )
: ( void )( printf( "%2d ", *a ), display_row ( ++a, --column ) );
}
void display( int **a, size_t row, size_t column )
{
if ( row != 0 )
{
display_row( *a, column );
display( ++a, --row, column );
}
}
int main(void)
{
enum { M = 3, N = 4 };
int a1[N] = { 1, 2, 3, 4 };
int a2[N] = { 5, 6, 7, 8 };
int a3[N] = { 9, 10, 11, 12 };
int *a[M] = { a1, a2, a3 };
display( a, M, N );
return 0;
}
Вывод программы:
1 2 3 4
5 6 7 8
9 10 11 12
Если не используйте вспомогательную функцию, тогда другой подход - использовать переменную stati c внутри рекурсивной функции.
Вот демонстрационная программа, которая использует рекурсивную функцию с переменной stati c.
#include <stdio.h>
void display( int** a, size_t row, size_t column )
{
static size_t pos = 0;
if ( row != 0 && column == 0 )
{
putchar( '\n' );
size_t tmp = column;
column = pos;
pos = tmp;
--row;
++a;
}
if ( row )
{
printf( "%2d ", a[0][pos++] );
display( a, row, --column );
}
}
int main(void)
{
enum { M = 3, N = 4 };
int a1[N] = { 1, 2, 3, 4 };
int a2[N] = { 5, 6, 7, 8 };
int a3[N] = { 9, 10, 11, 12 };
int *a[M] = { a1, a2, a3 };
display( a, M, N );
return 0;
}
Вывод такой же, как показано выше.
Если вам нужна программа на C ++, просто включите заголовки
#include <iostream>
#include <iomanip>
и вместо, например, этого вызова printf
printf( "%2d ", a[0][pos++] );
использование
std::cout << std::setw( 2 ) << a[0][pos++];