ogregor
@ogregor
арендатор vpn сервера debian

Как вывести значения из системного стека С++ применяя рекурсивную функцию?

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

Вам требуется написать программу, которая "переворачивает" последовательность положительных целых чисел. На вход подается последовательность разделенных пробелами положительных целых чисел. Последовательность заканчивается нулем. Требуется вывести эту последовательность в обратном порядке.

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

Требования к реализации: в данном задании запрещено использовать циклы, а также дополнительную память: массивы, строки или контейнеры (даже, если вы с ними уже знакомы). Вам разрешено заводить вспомогательные функции, если они вам нужны.

Подсказка: используйте рекурсию.

Sample Input: 15 26 1 42 0

Sample Output: 42 1 26 15

Остановился на этом.

#include <iostream>

using namespace std;
int main() {
    int nint;
    int *addr = &nint; 
    
    cin >> nint;
    if (nint == 0) {
        cout << addr; 
        return 1;
    }    
    return main();               
}
  • Вопрос задан
  • 681 просмотр
Пригласить эксперта
Ответы на вопрос 2
BuriK666
@BuriK666
Компьютерный псих
#include <iostream>

using namespace std;
int main() {
    int nint;
    cin >> nint;
    if (nint == 0) {
        return 1;
    }
    main();
    cout << nint << ' ';
}
Ответ написан
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Ваша оценка - 2 балла. Стандарт C++ запрещает вызывать main из приложения.

Использование рекурсии здесь нужно как раз для того, чтобы осуществить переворачивание последовательности - печать должна происходить, начиная с конца строки.

Рассмотрим пример переворачивания ASCIIZ - строки.

#include <iostream>
using namespace std;

void tnirp(const char* str)
{
	if(*str)
	{
		tnirp(str+1);
		cout << *str;
	}
}


void print(const char* str)
{
	if(*str)
	{
		cout << *str;
		print(str+1);
	}
}

int main() 
{
	const char str[]="Roses are red";
	print(str);
	cout << endl;
	tnirp(str);	
	return 0;
}


IDEONE

Разберите этот пример - прокомментируйте каждую строчку

Обратите внимание на разницу между текстом print и tnirp

Чтобы решить вашу задачу, нужно эту программу слегка дополнить.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы