Есть два ядро рекурсивного алгоритма:
1. условие окончания рекурсивного рекурсивное значение функции возврата и наличие или отсутствие функции установки типа возвращаемого рекурсивно определяет условие завершения
2. подзадач разложенных
Примеры 1-- башня проблемы Ханой
1 #include <iostream> 2 с использованием пространства имен STD; 3 недействительными Ханой ( INT п, символ А, символ B, символ С) { 4 , если (п == 1 ) соиЬ << " MOVE верхний диск из " << А << " к " << C << епсИ; 5 еще { 6 Ханой (n - 1 , А, С, В); - СоиЬ << « MOVE верхнего диска из » << А << "C << << епсИ; . 8 Ханой (N - 1. , В, А, С); . 9 } 10 } . 11 INT основных () { 12 INT н-; // Башни Ханоя масштаба 13 COUT << " Enter Башня Ханоя ваш масштаб: " << ENDL; 14 это время ( 1 ) { 15 CIN >> n-; 16 IF (п < 1 ) соиЬ << " ! Пожалуйста , проверьте введенные данные " << Endl; 17 в остальное BREAK ; 18 } . 19 символ A, B, C, 20 COUT << " Пожалуйста , введите имя три цилиндра: " << епсИ; 21 CIN >> A >> B >> C; 22 является Ханой (н-, A, B, C); // вызов функции для решения 23 возвращения 0 ; 24- }
Примеры массива и 2-- рекурсивное решение
. 1 #include <iostream> 2 от употребления имен STD; 3. INT GetSum ( INT н-, INT * А) { // п-есть число элементов 4. ЕСЛИ (п - == 1. ) Вернуться А [ 0 ]; 5. Остальное возвращают GetSum ( N - 1. , а) + а [N - 1. ]; . 6 } . 7 INT основных () { 8. INT размер; // размер этой проблемы, а именно желаемое количество элементов массива . 9 COUT << " Пожалуйста , введите вопрос размер: " << епсИ; 10 это время ( 1. ) { 11. CIN >> размер; 12 является IF (размер <= 0 ) << COUT " Пожалуйста , проверьте правильность шкалы " << епсИ; 13 является еще BREAK ; 14 } 15 INT * P = новый новый INT [размер ]; // динамический открытый массив 16 COUT << " Пожалуйста , введите элементы массива в свою очередь: " << епсИ; 17 . для ( INT I = 0 ; I <размер, я ++ ) { 18 CIN >> * (P +I); . 19 } 20 COUT << " предоставляется каждый элемент массива и: " << епсИ << GetSum (размер, Р); 21 возвращает 0 ; 22 }
Пример 3-- максимального массива рекурсивное решение
. 1 #include <iostream> 2 #include <math.h> 3. Что используя пространство имен STD; . 4 INT getMax ( INT н-, INT * А) { // п-число элементов . 5 ЕСЛИ (п - == . 1 ) возвращают А [ 0 ]; . 6 остальное возвращение макс (getMax (N - 1. , а), [N - 1. ]); . 7 } . 8 INT основных () { 9. INT размер; // количество масштабов этой проблемы, то есть элементы 10 COUT < < " Пожалуйста , введите масштаб проблемы:" << епсИ; . 11 это время ( 1. ) { 12 CIN >> размер; 13 является IF (размер <= 0 ) << COUT " Пожалуйста , проверьте правильность шкалы " << End L , ; 14 в еще BREAK ; 15 } 16 INT * P = новый новый INT [размер]; // динамический массив открыт 17. COUT << " Пожалуйста , введите элемент массива , в свою очередь: " << епсИ; 18 является для ( INT I = 0 ; I <размер, я ++ ) { . 19 CIN >> * (P + I); 20 } 21 является COUT << " Максимальное значение массива ввода: " << епсИ << getMax (размер, P); 22 возвращают 0 ; 23 }