Я пытаюсь запрограммировать рекурсивную функцию, которая позволит мне печатать каждую цифру числа в отдельной строке следующим образом:
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
Как это сделать?
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
В вашем конкретном случае вы можете просто поместить cout после рекурсивных вызовов, и он будет печататься в обратном порядке.
В более общем плане вы не всегда можете печатать напрямую в обратном порядке или неясно, как это сделать: в таких случаях вы могли бы добавить вывод на каждом шаге к вектору строки и, после выхода из функции, распечатать вектор в обратном порядке. Он немного менее эффективен и требует сохранения в памяти всех выходных данных на каждом шаге, но, когда эти факторы незначительны, его легко реализовать и понять.
cout
после рекурсивного вызова.decompose()
измените его тип возврата сint
наvoid