Как напечатать последовательность от 0 до N, используя рекурсию только с одним параметром в C ++ - PullRequest
0 голосов
/ 24 сентября 2019

Я знаю, как написать рекурсивную функцию для печати от N до 0: N, N-1, ... 1, 0

Но почему-то я зацикливаюсь на том же, но в возрастающем порядкеот 0, 1, ..., N.

Это мой код от N до 0:

int main() {
    int n = 4;
    backward(n);
    return 0;
}

void backward(int n) {

    if (n == 0) {
        std::cout << n << std::endl;
    }

    else if (n > 0) {
        std::cout << n << " ";
        backward(n - 1);
    }
}

Ответы [ 3 ]

4 голосов
/ 24 сентября 2019

Вы должны сделать рекурсивный вызов до cout.

. Вы будете набирать все до n, ничего не печатая.Затем, на обратном пути, он напечатает n в порядке возрастания.

int main() {
    int n = 4;
    forward(n);
    return 0;
}

void forward(int n) {

    if (n == 0) {
        std::cout << n << std::endl;
    }

    else if (n > 0) {
        forward(n - 1);
        std::cout << n << " ";
    }
}
3 голосов
/ 24 сентября 2019

Вам просто нужно поменять местами std::cout << n << " "; и backward(n - 1);.Сначала с оператором print вы печатаете значение n, а затем переходите к следующей «итерации».Если вы вместо этого сначала вызовете функцию рекурсивно, а затем напечатаете значение n, вы вернетесь к нулевому регистру, напечатаете ноль, вернетесь к одному регистру, напечатаете один и продолжите, пока не вернетесь к n случай, когда вы печатаете n.Так что forward это просто

void forward(int n) {

    if (n == 0) {
        std::cout << n << std::endl;
    }

    else if (n > 0) {
        forward(n - 1);
        std::cout << n << " "; // print n only after everything else has printed
    }
}
0 голосов
/ 24 сентября 2019
int main() {
    int n = 4;
    forward(n);
    std::cout<<"\n";
    return 0;
}

void forward(int n) {
    if ( n == -1)     
     return;       
    forward(n - 1); 
   std::cout<<n<<" ";
} 
...