Member 13426989 Ответов: 1

Решено - реверсивный массив с использованием рекурсии (специфическая проблема вывода)


Я завершил свою рекурсивную программу обратного массива, однако она не выводит последнее число из исходного массива в обратном массиве. Вот пример вывода:

Исходный Массив: 18 18 10 8 5 1 13 13 18 19
Реверсивный Массив: 18 13 13 1 5 8 10 18 18

Он не выводит "19" (которое должно быть помещено первым в обратном массиве). Может ли кто-нибудь подсказать мне, где находятся ошибки в моем коде? Любая помощь будет очень признательна. Спасибо. Вот часть моего кода:

void print_reverse_array(int a[], int k)
{
  if (k == 0)
    return;
  else
    cout << setw(3) << a[k - 1];
    print_reverse_array(a, k - 1);
}
 
int main ()
{
  int arr[SIZE];
  cout << "Original Array:";
  initialize(arr);
  print_array(arr);
  cout << "Reversed Array:";
  print_reverse_array(arr, SIZE - 1);
  return 0;
}


Что я уже пробовал:

Я попытался увеличить/уменьшить k в операторе if-else, однако это тоже не работает (он не позволяет мне компилироваться).

*Это рандомизированный массив (диапазон равен [1-20] )


(Я понял, что никогда не инициализировал k = SIZE в своей основной функции) - решено

jeron1

Пройдите через первый вызов функции print_reverse_array (), обратите внимание на значение k, затем посмотрите на строку cout и вычисленный индекс массива.

Member 13426989

Спасибо! Я понял, что никогда не устанавливал k = SIZE;
и в моем основном (после инициализации k=SIZE) это была моя ошибка: print_reverse_array(arr, SIZE - 1), когда это должно быть (arr, k)

jeron1

k будет тем, что передается в качестве второго аргумента вызова функции, вы отправляете SIZE-1, так что это значение, которое k стало при вызове функции. Просто передайте размер в качестве второго аргумента.

1 Ответов

Рейтинг:
1

Patrice T

Цитата:
Он не выводит "19" (которое должно быть помещено первым в обратном массиве).

Если Ваш массив равен 0 1 2 3.
Вы хотите напечатать 3 2 1 0.
Но вы получаете 2 1 0.

Если Ваш массив является 0 1 2 3 4 5 6 7 8 9.
Вы хотите напечатать 9 8 7 6 5 4 3 2 1 0.
Но вы получаете 8 7 6 5 4 3 2 1 0.
В чем может быть проблема ? Подумайте об этом и используйте свой мозг !
Какие изменения вам нужно сделать, чтобы получить желаемый результат ? Поиграйте с ценностями и посмотрите, что получится.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.