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

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

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

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

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

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

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

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

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

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

Дано натуральное число n (n <= 9999). Учитывая все четыре цифры числа, определить, правильно, что оно содержит: все разные цифры - C++
Плиз срочно надо=) для Microsoft Visual Studio 2010 Запрещено размещать тему в нескольких разделах одновременно (кросспостинг), а...

5
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 16:49 #2
Цитата Сообщение от Eudesan Посмотреть сообщение
В связи с этим вопросы: Как это лучше и красивее сделать?
Может по ссылке передавать переменную в функцию, а не по значению?
1
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.08.2013, 17:40 #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;
}
1
qwe12355
7 / 7 / 0
Регистрация: 26.11.2011
Сообщений: 117
25.08.2013, 17:57 #4
prolog попробуй поучить там многое завязано на рекурсии.
1
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.08.2013, 18:06 #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;
}
1
Миниатюры
Рекурсия. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами или новыми строками  
Eudesan
0 / 0 / 0
Регистрация: 25.08.2013
Сообщений: 5
25.08.2013, 20:06  [ТС] #6
Цитата Сообщение от qwe12355 Посмотреть сообщение
prolog попробуй поучить там многое завязано на рекурсии.
спасибо. попробую погуглить...

а может еще что-нибудь конкретное кто-то посоветует? а то совсем она (рекурсия) туго для меня воспринимается
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2013, 20:06
Привет! Вот еще темы с ответами:

Дано натуральное число а. Получить новое число, удалив из данного все цифры “2” C++ - C++
помогите с решением пожалуйста

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

Дано натуральное трехзначное число n. Переставить его цифры так, чтобы образовалось максимальное число, записанное теми же цифрами. - C++
Дано натуральное трехзначное число n. Переставить его цифры так, чтобы образовалось максимальное число, записанное теми же цифрами.

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


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
25.08.2013, 20:06
Ответ Создать тему
Опции темы

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