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

С помощью рекурсии вывести на экран весь диапазон между заданными числами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить радиус пяти первых боровских орбит в метрах и ангстремах http://www.cyberforum.ru/cpp-beginners/thread1130544.html
Радиус боровской орбиты электрона находится по формуле: r=ε0*h^2*n^2/π*me*e^2. Определить радиус пяти первых боровских орбит в метрах и ангстремах.
C++ Не рекурсивный обход графа в глубину доброго времени суток. Запутался, помогите разобраться и исправить ошибку ( void OrGraph::dfs(int v){ int n = GetCount(); // получаем количество вершин int *a = new int; for (int i = 0; i < n; i++){ *(a + i) = 1; } int k = numberTop(v);// кладем в к номер вершины v http://www.cyberforum.ru/cpp-beginners/thread1130543.html
C++ Вычислить функцию f(x), используя ее разложение в степенной ряд (дорешать)
Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд в трех случаях: а) для заданного n; б) для заданной точности е (е=0.0001); с) для «точного» значения (по аналитической формуле). Для сравнения найти относительную погрешность вычисления функции значение функции о_погр = ABS( (точ_знач – приближ_знач)/ точ_знач)...
Разделить строки на мелкие части C++
Помогите реализовать такую вещь: Пользователь вводит слова через запятую (one,two,three,four,five,six), программа же записывает каждое слово в отдельную строку (аналог String split по запятой в ArrayList - на Джаве). И есть ли split вообще в C++?
C++ Матрица D(4,4). Определить максимальный среди положительных, минимальный среди отрицательных и поменять их местами http://www.cyberforum.ru/cpp-beginners/thread1130494.html
Помогите решить задачу: Задана матрица D(4,4). Определить максимальный среди положительных, минимальный среди отрицательных и поменять их местами. Буду очень благодарен.
C++ Отсутствие библиотеки sScrollBar.hpp мешает запуску проекта Здравствуйте, я столкнулся со следующей проблемой: наткнулся я как-то в сети на проект, написанный в борланде 2009, в котором есть функционал, очень необходимый мне. Я его скачал, скачал и сам борланд 2009, чтобы запустить его. Открыл файл проекта и нажал заветную клавишу F9. Но к моему сожалению, построение проекта не было выполнено по причине того, что не была найдена библиотека sScrollBar.hpp.... подробнее

Показать сообщение отдельно
KOPOJI
Модератор
Эксперт HTML/CSSЭксперт PHP
16695 / 6621 / 431
Регистрация: 12.06.2012
Сообщений: 19,875
Завершенные тесты: 1
28.03.2014, 00:11
Это будет несколько проблематично и даже, пожалуй, костыльно..
Первый способ - самый простой и "в лоб", что называется (первым пришел в голову):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
int print_interval(int, int);
 
int main(int argc, char *argv[])
{
    int a, b;
 
    std::cout << "Введите a.." << std::endl;
    std::cin >> a;
    std::cout << "Введите b.." << std::endl;
    std::cin >> b;
 
    std::cout << std::endl;
 
    if(a > b)
        print_interval(--a, ++b);
    else
        print_interval(++a, --b);
 
    return 0;
}
 
int print_interval(int from, int to)
{
    static int sign = from < to ? 1 : -1;
 
    std::cout << from << std::endl;
    return from != to ? print_interval(from + sign, to) : 0;
}
Альтернативный вариант, который, по идее, более "правильный", т.к. вся эта логика перенесена внутрь функции.. Однако, в связи с использованием рекурсии алгоритм получился ужасным (не знаю, время уже достаточно позднее, может, кто со свежей головой придумает лучше). Но то, что наваял:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
 
int print_interval(int, int);
 
int main(int argc, char *argv[])
{
    int a, b;
 
    std::cout << "Введите a.." << std::endl;
    std::cin >> a;
    std::cout << "Введите b.." << std::endl;
    std::cin >> b;
 
    std::cout << std::endl;
 
    print_interval(a, b);
 
    return 0;
}
 
int print_interval(int from, int to)
{
    static int sign = from < to ? 1 : -1;
    static bool is_first = true;
    bool is_last = sign == 1 ? from + 1 > to : from < to + 1;
 
    if(is_first)
    {
        is_first = false;
        return print_interval(from + sign, to);
    }
    else
    {
        if(is_last)
            return 0;
        else
        {
            std::cout << from << std::endl;
            return from != to ? print_interval(from + sign, to) : 0;
        }
    }
}
Хотя все было бы куда проще, если бы можно было включить сами исходные числа в диапазон.

Добавлено через 2 минуты

Не по теме:

только не уверен, что второй вариант преподователь засчитает как ваш



Добавлено через 9 минут
Цитата Сообщение от KOPOJI Посмотреть сообщение
Хотя все было бы куда проще
а также, если бы порядок вывода чисел был не важен (например, в любом случае вывод от меньшего к большему - тогда std::swap и все..)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru