Форум программистов, компьютерный форум CyberForum.ru

Задача на рекурсию - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
13.08.2012, 15:10     Задача на рекурсию #1
Помогите решить след. задачу:
Дана последовательность натуральных чисел (одно число в строке), завершающаяся числом 0. Выведите все нечетные числа из этой последовательности, сохраняя их порядок.
В этой задаче нельзя использовать глобальные переменные и передавать какие-либо параметры в рекурсивную функцию. Функция получает данные, считывая их с клавиатуры. Функция не возвращает значение, а сразу же выводит результат на экран. Основная программа должна состоять только из вызова этой функции.
Ввод
3
1
2
0
Вывод
3
1
Вот мой вариант, но здесь не сохраняется порядок:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void Func()
{   int x;
    cin>>x;
    if(0==x)
    {   cout<<"Result:"<<endl;
        return;
    }
    else
    {   Func();
        if(x%2!=0)
            cout<<x<<endl;
    }
}
Как же всё-таки решить задачу целиком? Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2012, 15:10     Задача на рекурсию
Посмотрите здесь:

C++ Задача на рекурсию
Задача на рекурсию C++
C++ Задача на рекурсию
C++ Задача на рекурсию
C++ задача на рекурсию в си++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
13.08.2012, 18:20     Задача на рекурсию #2
PG94, реши задачу через циклы. Потом перепили в рекурсию
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,051
13.08.2012, 18:24     Задача на рекурсию #3
порядок операторов перепиши
C++
1
2
3
4
5
6
else
    {  
        if(x%2!=0)
            cout<<x<<endl;
    Func();
    }
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
13.08.2012, 21:27  [ТС]     Задача на рекурсию #4
Цитата Сообщение от ValeryS Посмотреть сообщение
порядок операторов перепиши
C++
1
2
3
4
5
6
else
    {  
        if(x%2!=0)
            cout<<x<<endl;
    Func();
    }
Спасибо за подсказку, но я искал другой приём, т.е. можно ли с помощью такой ф-ии с исп. рекурсии сначала ввести все данные, а только затем получить весь результат; задержать нужные зн-ия в память до конца ввода?
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,051
13.08.2012, 21:38     Задача на рекурсию #5
Цитата Сообщение от PG94 Посмотреть сообщение
но я искал другой приём, т.е. можно ли с помощью такой ф-ии с исп. рекурсии сначала ввести все данные, а только затем получить весь результат;
нет нельзя, потому что тебе нельзя ни глобальными переменными ни аргументами
т.е каждая следующая функция не будет знать что было в предыдущей
посему надо написать а потом вызвать
если наоборот как ты написал то и получится
сначала функция1
вводишь данные(допустим 1)
потом функция2
опять вводишь данные(3)
потом функция3
вводишь 0
выход из функции3
печать 3(это запомнила 2 функция)
выход из функции2
печать 1(это запомнила 1 функция)
выход
вот тебе и обратный отсчет
Yandex
Объявления
13.08.2012, 21:38     Задача на рекурсию
Ответ Создать тему
Опции темы

Текущее время: 02:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru