Форум программистов, компьютерный форум 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
Модератор
 Аватар для KOPOJI
16242 / 6453 / 390
Регистрация: 12.06.2012
Сообщений: 19,353
28.03.2014, 10:00     С помощью рекурсии вывести на экран весь диапазон между заданными числами
Ну да, можно будет избавиться от одной статической переменной..
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
#include <iostream>
 
int print_interval(int, 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, a);
 
    return 0;
}
 
int print_interval(int from, int to, int current)
{
    static int sign = from < to ? 1 : -1;
    bool is_last = sign == 1 ? from + 1 > to : from < to + 1;
 
    if(from == current)
        return print_interval(from + sign, to, from);
    else
    {
        if(is_last)
            return 0;
        else
        {
            std::cout << from << std::endl;
            return from != to ? print_interval(from + sign, to, from) : 0;
        }
    }
}
Но появляются два минуса:
1) Необходимо передавать три аргумента вместо двух
2) Если кому-то придется разбирать программу, то она может показаться нелогичной - ведь значение from будет меняться, и при дебаге может быть непонятно смысл сего действия
Насколько я знаю, значения по умолчанию в C++ (да и во множестве других ЯП) не подразумевают возможности задания локальной переменной в качестве значения по умолчанию, хотя это бы убрало первый пункт..

Добавлено через 2 минуты
З.Ы. можно избавиться и от второй переменной, протупил)
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
#include <iostream>
 
int print_interval(int, 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, a);
 
    return 0;
}
 
int print_interval(int from, int to, int current)
{
    static int sign = from < to ? 1 : -1;
 
    if(from == current)
        return print_interval(from + sign, to, from);
    else
    {
        if(current + sign == to)
            return 0;
        else
        {
            std::cout << from << std::endl;
            return from != to ? print_interval(from + sign, to, from) : 0;
        }
    }
}
 
Текущее время: 05:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru