функция рекурсивной печати другим способом

0

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

int decompose(int n){
  if(n%10){
    cout << n%10 << endl; 
    return decompose(n/10);
  }
}

int main(int argc, char *argv[]){
    decompose(2345);
}

ВЫВОД

5
4
3
2

ПРОБЛЕМА: Я хотел напечатать на другом пути

2
3
4
5

Как это сделать?

  • 5
    Попробуйте поставить вызов cout после рекурсивного вызова.
  • 0
    Поскольку вы печатаете число в функции decompose() измените его тип возврата с int на void
Теги:
recursion
numbers

2 ответа

3
Лучший ответ
void decompose(int n){
  if (n>=10)           //Call decompose if there are "more" digits in the number to print
     decompose(n/10);  
  cout << n%10 << endl;  //print the last digit of n
}

int main(int argc, char *argv[]){
    decompose(2345);
}

Так как вы сначала распаковываете и печатаете позже, например, 2345, стек выглядит следующим образом:

главный()

разлагаются (2345)

разлагаются (234)

разлагаются (23)

разлагаются (2)

то, когда мы начинаем возвращаться, каждый вызов будет печатать последнюю цифру: 2 → 3 → 4 → 5

ПРИМЕЧАНИЕ. В вашей версии вы используете условие if(n%10){} это будет false, если n кратно 10. Это означает, что версии с ним остановят момент, когда будет достигнута 0-разрядная цифра.

Попробуйте их с входами, такими как 23450 или 23045

0

В вашем конкретном случае вы можете просто поместить cout после рекурсивных вызовов, и он будет печататься в обратном порядке.

В более общем плане вы не всегда можете печатать напрямую в обратном порядке или неясно, как это сделать: в таких случаях вы могли бы добавить вывод на каждом шаге к вектору строки и, после выхода из функции, распечатать вектор в обратном порядке. Он немного менее эффективен и требует сохранения в памяти всех выходных данных на каждом шаге, но, когда эти факторы незначительны, его легко реализовать и понять.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню