@Evsign

Как вывести числа в обратном порядке без использования массивов в с++?

Помогите пожалуйста решить, а главное понять как решить данное задание:

На стандартный вход программе подается последовательность разделённых пробелами положительных целых чисел, заканчивающаяся нулем. Требуется вывести эту же последовательность в обратном порядке (без нуля), разделяя числа пробелами. При этом запрещается использовать массивы (даже если вы с ними уже знакомы). (Подсказка: воспользуйтесь рекурсией).
Sample Input:

1 2 3 4 0

Sample Output:

4 3 2 1

Для начала я решил попробывать реализовать хотя бы вывод чисел в заданном порядке. Получилось только так:

#include <iostream>

using namespace std;

int numb(int x){

		if (x != 0){
	  	cout << x << " ";
		}
		return 0;

}

int main()
{
	int numbers = 0;

	while (cin >> numbers){
		numb(numbers);
	}

  return 0;
}


но вот куда дальше плесать и как всунуть сюда рекурсию вообще понять не могу( Когда вставляю рекурсию почти всегда происходит ошибка сегментирования.
  • Вопрос задан
  • 32360 просмотров
Решения вопроса 1
morozovdenis
@morozovdenis
нажмите в студии ctrl+F5, введите например "1 2 3 0" без кавычек и нажмите enter ;)
#include <iostream>

void foo()
{
	int number;
	cin >> number;
	if (number != 0)
	{
                //фишка в том что:
		foo(); //сначала выполняется функция 
		cout << number << " "; // а после уже выполняется вывод
	}
}

int main(int argc, char *argv[])
{
	foo();
        return 0;
}


UPD:
1. рекурсия использует стек вызовов и глубина рекурсии зависит от размера этого стека
2. исходя из предыдущего пункта не стоит писать код который выше в продакшене, лучше использовать цикл и массив(или стек) который запрещают
3. обновил сигнатуру main, это никак не должно повлиять на выполнение программы, но так корректнее

вот результат:
43c9f6240b4e4354b5e4e9e6c7114ff8.png
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AdmAlexus
@AdmAlexus
Эникей очень широкого профиля
Мсье на stepic.org курс по c++ проходит?:)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы