OccamaRazor
@OccamaRazor

Как изменить порядок числе зеркально в массиве?

Можно ли с помощью рекурсии изменить порядок чисел в массиве без использования библиотек, встроенных функций используя лишь указатели?

#include <iostream>

using namespace std;
void copy(int old_array[], int new_array[], int len);
int reverse(int *pB, int len, int i);

int main() {
	const int len = 5;
	int A[len] = { 1,2,3,4,5 };
	int B[len];
	int *pA = A;
	int *pB = B;
	copy(pA, pB, len);
	reverse(pB, len, 0);
}

void copy(int A[], int B[], int len) {
	for (int i = 0; i < len; ++i) 
		*B++ = *A++;
}

int reverse(int *pB, int len, int i)
{
	int x = pB[i];
	if (i < len - 1) reverse(pB, len, i + 1);
	cout << x << endl;
	return 0;
}


После выполнения reverse массив B так и остаётся по прежнему 1,2,3,4,5 как и A 1,2,3,4,5
  • Вопрос задан
  • 320 просмотров
Решения вопроса 1
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Например так:
#include <iostream>

void printArray(const int * array, size_t len)
{
	std::cout << "[ ";
	for(size_t i = 0; i < len; ++i)
		std::cout << array[i] << (i == len - 1 ? "" : ", ");
	std::cout << " ]" << std::endl;
}
void _reverseArray(int * first, int *last)
{
	int tmp = *first;
	*first = *last;
	*last = tmp;
	if(first < last)
		_reverseArray(first + 1, last - 1);
}
void reverseArray(int * ptr, size_t len)
{
	_reverseArray(ptr, ptr + len - 1);
}
int main() {
	int array[] = { 1, 2, 3, 4, 5, 6 };
	size_t len = sizeof(array) / sizeof(int);
	printArray(array, len);
	reverseArray(array, len);
	printArray(array, len);
	return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
Так а у вас в reverse и не модифицируется массив B.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы