Ну да, можно будет избавиться от одной статической переменной..
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;
}
}
} |
|