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

Рекурсия. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Некоторые неясности с задачей http://www.cyberforum.ru/cpp-beginners/thread943409.html
Имеется задача: вырезано Имеется ее решение: #include <stdio.h> #include <iostream> typedef int *B; int main () {
C++ Файл: Вывести на экран результаты 3 файлов, которые содержат отдельно каждый букви, цифры, и знаки препинания... Нужно создать файл с буквами, цифрами, и знаками препинания. Вывести на экран результаты 3 файлов, которые содержат отдельно каждий букви, цифры и знаки препинания... http://www.cyberforum.ru/cpp-beginners/thread943394.html
C++ Обработка условий
Здравствуйте. Столкнулся с такой задачей: имеется некоторый ограниченный набор логических условий (например, свет выключен да/нет, сейчас ночь да/нет) и нужно сделать алгоритм, который позволит...
C++ Не могу выполнить пример из книги
Добрый день начал изучать C++, и уже столкнулся с первой проблемой не могу скомпилировать код ниже. Пример демонстрирует разницу между локальными и глобальными переменными, взят из книги Шилд Г. "С++...
C++ Две пары различных кавычек, которые воспринимаются как одинаковые http://www.cyberforum.ru/cpp-beginners/thread943376.html
Добрый день. Появилась следующая проблема. Если через консоль выполнить команду: "D:\\Program Files (x86)\\GTA San Andreas\\samp.exe" 127.0.0.1:1337 ...то запускается все так, как надо. Но если...
C++ Текстовый рандом, не могу выбрать лучший способ Добрый день, уважаемые программисты. Вот возник какой вопрос. Мне нужен текстовый рандом, консольный для начала. По скольку с подключением БД у меня большая беда, я решила обойти этот момент и... подробнее

Показать сообщение отдельно
Eudesan
0 / 0 / 0
Регистрация: 25.08.2013
Сообщений: 5

Рекурсия. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками - C++

25.08.2013, 16:02. Просмотров 1199. Ответов 5
Метки (Все метки)

Привет! Начал изучать рекурсию на с++, прочитал несколько статей и понял, что ничего не понял
Нашел несколько заданий, вот одно из них:
"Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками. При решении этой задачи нельзя использовать строки, списки, массивы (ну и циклы, разумеется). Разрешена только рекурсия и целочисленная арифметика."

Решил попробовать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
 
int func(int num, int count)
{
    if (num/count)
        func(num, count*10);
    count/=10;
    cout<<num/count<<" ";
    num%=count;
    return 0;
}
 
void main()
{
    int num;
    cin>>num;
    func(num, 10);
    cout<<endl;
}
Тут понял, что работает неправильно из-за того, что в 12-ой строке я меняю переменную num, а в следующем рекурсивном проходе она снова равна введенному пользователем числу. Решил попробовать не передавать num в рекурсивную функцию, чтоб не было проблем с её изменением и сделал её глобальной:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
 
int num;
int func(int count)
{
    if (num/count)
        func(count*10);
    count/=10;
    cout<<num/count<<" ";
    num%=count;
    return 0;
}
 
void main()
{
    cin>>num;
    func(10);
    cout<<endl;
}
Теперь все работает, но не покидает идея, что можно было бы как-то избавиться от "глобализации" переменной num. В связи с этим вопросы: Как это лучше и красивее сделать? и Как все-таки в данном примере ведет себя рекурсия? Почему она не дает изменить num?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru