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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Eudesan
0 / 0 / 0
Регистрация: 25.08.2013
Сообщений: 5
#1

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

25.08.2013, 16:02. Просмотров 1157. Ответов 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?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2013, 16:02     Рекурсия. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками
Посмотрите здесь:

РЕКУРСИЯ-----дано натуральное число N. выведите все цифры по одной, в обратном порядке, разделяя их пробелами или новыми строками. При решении этой за - C++
дано натуральное число N. выведите все цифры по одной, в обратном порядке, разделяя их пробелами или новыми строками. При решении этой...

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

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

Дано натуральное число n>1. Выведите все простые множители этого числа в порядке возрастания с учетом кратности. - C++
Дано натуральное число n&gt;1. Выведите все простые множители этого числа в порядке возрастания с учетом кратности. Ввод...

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

Дано целое число. Вывести набор символов, содержащий цифры этого числа в обычном и обратном порядке - C++
Дано целое число. Вывести набор символов , содержащий цифры этого числа в обычном и обратном порядке. Помогите написать, сроки поджимают...

Дано натуральное число n. Найти все его делители и разложить его на простые числа. - C++
Привет.Помогите пожалуйста решить задчку. Заранее спасибо. Дано натуральное число n. Найти все его делители и разложить его на...

Дано натуральное число n. Проверить будут ли все цифры числа разными - C++
Буду очень благодарен)

Дано натуральное число n. Получить все его натуральные делители. - C++
Помогите пожалуйста. Нужно написать программу на языке Си. Дано натуральное число n. Получить все его натуральные делители. ...

Дано натуральное число. Найти все его простые положительные делители. C++ - C++
Входные данные Дано натуральное число N. Выходные данные Вывести все его простые положительные делители.

Дано натуральное трехзначное число n. Верно ли, что среди его цифр есть 0 или 9? - C++
Доброго времени суток как реализовать на c++?Дано натуральное трехзначное число n. Верно ли, что среди его цифр есть 0 или 9? Понимаю что...

Задано натуральное число, разместить памяти последовательно все его цифры с помощью указателя - C++
Задано натуральное число, разместить их памяти последовательно все его цифры с помощью указателя.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 16:49     Рекурсия. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками #2
Цитата Сообщение от Eudesan Посмотреть сообщение
В связи с этим вопросы: Как это лучше и красивее сделать?
Может по ссылке передавать переменную в функцию, а не по значению?
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.08.2013, 17:40     Рекурсия. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками #3
Цитата Сообщение от Eudesan Посмотреть сообщение
не покидает идея, что можно было бы как-то избавиться от "глобализации" переменной num.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 void print(int a)
{
    if (a)
    {
        print(a / 10);
        std::cout << (a % 10) << " "; 
    }
}
 
int main()
{
    print (123);
    return 0;
}
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
25.08.2013, 17:57     Рекурсия. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками #4
prolog попробуй поучить там многое завязано на рекурсии.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 18:06     Рекурсия. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками #5
Первый код (добавлен один значок):
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;
}
Миниатюры
Рекурсия. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками  
Eudesan
0 / 0 / 0
Регистрация: 25.08.2013
Сообщений: 5
25.08.2013, 20:06  [ТС]     Рекурсия. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками #6
Цитата Сообщение от qwe12355 Посмотреть сообщение
prolog попробуй поучить там многое завязано на рекурсии.
спасибо. попробую погуглить...

а может еще что-нибудь конкретное кто-то посоветует? а то совсем она (рекурсия) туго для меня воспринимается
Yandex
Объявления
25.08.2013, 20:06     Рекурсия. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru