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

Найти 1+2+3+...+n рекурсивно и итеративно - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ n>=a в степени k http://www.cyberforum.ru/cpp-beginners/thread162564.html
вот решил задачу таким образом: задача: Напишите программу, находящую для заданных числел n и k максимальное число a, такое, что ak≤ n решение: #include <iostream> #include <cmath> using...
C++ Найти сумму элементов массива, которые больше своих "соседей" справа и слева В массиве из N элементов найти сумму тех элементов, которые больше своих "соседей" справа и слева. http://www.cyberforum.ru/cpp-beginners/thread162561.html
C++ OpenMP, создание потоков
В инете нашел много примеров по распараллеливание циклов, но никак не могу понять, как просто написать чтобы конкретная функция выполнялась в отдельном потоке? int main() { #pragma omp parallel...
Класс комплексных чисел C++
Ребят, помогите пожалуйста написать класс комплексных чисел... Я плохо разбираюсь в объектно-ориентированном программировании, учусь, покажите плиз!
C++ Программа работы с дробями (консоль) http://www.cyberforum.ru/cpp-beginners/thread162536.html
Десятичные дроби. Нужно чтобы программа умела: делить, умножать, складывать и вычитать и построена обязательно на классах, код не мой и разобраться в нём довольно трудно, плюс "консоль" что не мой...
C++ Наследование, классы, хеширование есть у кого простые задачи на эти темы? у меня задания нет, нужны любые... по поиску полазил- не нашёл ничего лёгкого=( подробнее

Показать сообщение отдельно
NightmareZ
1358 / 563 / 37
Регистрация: 31.03.2009
Сообщений: 1,935
31.08.2010, 01:59
Цитата Сообщение от Lavroff Посмотреть сообщение
ISergey, Действительно интересная вещь. Только вот хоть убей не пойму как этим пользоваться. Обычными шаблонами - да, но настолько закрученными через enum. Эх.
enum нужен только для того, чтобы можно было задать значение полю (в данном случае value).

А дальше... Есть вот такой код:

C++
1
2
3
4
5
6
7
8
9
10
11
template<int N>
struct Sum
{
        enum { value = N + Sum<N-1>::value };
};
 
template<>
struct Sum<0>
{
        enum { value = 0 };
};
...вызываешь ты его:
C++
1
const int sum = Sum<2>::value;
Компилятор начинает подставлять 2 вместо N:
C++
1
2
3
4
5
template<2>
struct Sum
{
        enum { value = 2 + Sum<2-1>::value };
};
тут ему всё известно, кроме Sub<2-1>. Он подставляет дальше уже 1 вместо N:
C++
1
2
3
4
5
template<1>
struct Sum
{
        enum { value = 1 + Sum<1-1>::value };
};
тут ему опять таки всё известно, но кроме Sub<1-1>.
Sub<1-1> это Sub<0>, а в нём value равно нулю:
C++
1
2
3
4
5
template<>
struct Sum<0>
{
        enum { value = 0 };
};
Компилятор берёт этот value и рекурсия отсюда идёт назад до тех пор, пока не соберётся исходный шаблон.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru