Member 13277493 Ответов: 1

Как этот код генерирует все строки длины n, взятые из 0...k-1


Я понимаю, что на начальном этапе до базового случая он присваивает 0 всем членам массива, но я не понимаю, что происходит после этого. Затем он должен перейти от базового случая к своим верхним вызывающим функциям, но как это происходит, и я не понимаю также, в каком случае цикл проходит более одного раза. Заранее спасибо.
void k_string(char* A, int n, int k){
  if(n<1){
    printf("%s", A);
  }

  else{
    for(int j=0; j<k; j++){
      A[n-1]=j;
      k_string(A, n-1, k);
    }
  }
}


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

Я попытался шаг за шагом писать на бумаге, но поскольку я не понимаю основной логики, это не имеет никакого значения.

1 Ответов

Рейтинг:
10

Patrice T

Цитата:
Я понимаю, что на начальном этапе до базового случая он присваивает 0 всем членам массива, но я не понимаю, что происходит после этого.

Неужели вы упустили из виду, что это рекурсивная функция ?
Запустите отладчик и понаблюдайте за выполнением кода, это наверняка поможет разобраться.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

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

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

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Member 13277493

спасибо, я пытался понять с помощью отладчика, но были некоторые проблемы, с которыми я столкнулся, я попробую еще раз

Patrice T

поищите учебник по вашему отладчику.

Stefan_Lang

Наиболее важными частями отладки являются: установка точек останова, проверка состояния программы и пошаговое выполнение кода. Если вы используете VisualStudio (независимо от того, какая версия), перейдите по ссылкам, опубликованным Патрисом, чтобы узнать об этом. В противном случае попробуйте F1 или google, чтобы найти справку по конкретному отладчику, который у вас есть.

AlexGambler

благодаря вашему решению я могу так решить свои проблемы, thnx