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

указатели с++, дорешать) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ метод создания двух массивов, для дальнейшего умножения их между собой http://www.cyberforum.ru/cpp-beginners/thread189674.html
Помогите правильно описать метод создания двух массивов А и В. Как правильно записать все это??? Создание должно описываться в классе.........То есть я создаю класс, там обьявляю нужные данные, в pablic создаю массивы а потом при помощи random я должен заполнить эти массивы......
C++ вывод сортировки по алфавиту (ошибка) Скажите пожалуйста в чем ошибка прога не дорабатывает идею. Вот условие: Ввести данные. Отсортировать список студентов по принадлежности к кафедре. В рамках кафедры разместить информацию по алфавиту. Вывести результаты сортировки. вот мой код: #include<iostream> using namespace std; struct Student{ char name; http://www.cyberforum.ru/cpp-beginners/thread189664.html
C++ програама файл на с++
напишите программу считывающую текст из файла и выводящая этот текст в консоли
простое число C++
Подскажите пожалуйста как проверить является ли число простым?
C++ Определить, сигнал какого цвета сигнал горит для пешеходов в этот момент. http://www.cyberforum.ru/cpp-beginners/thread189646.html
3. Работа светофора для пешеходов запрограммирована следующим образом: в начале каждого часа в течение трех минут горит зеленый сигнал, затем в течение двух минут — красный, в течение трех минут — опять зеленый и т. д. Дано вещественное число t, означающее время в минутах, прошедшее с начала очередного часа. Определить, сигнал какого цвета горит для пешеходов в этот момент. 21. Замена всех...
C++ Функция _rmdir Хотел бы вас попросить навести мне пример маленькой программы по функции _rmdir подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
11.11.2010, 23:01     указатели с++, дорешать)
Ну для примера вот вам простейшая рекурсия - вычисление факториала (n-факториал, обозначается n! = n * (n - 1) * (n - 2) * ... * 2 * 1 - произведение целых чисел от 1 до n. При этом принято, что 0! = 1! = 1):

C
1
2
3
4
5
6
7
int fact(int n)
{
    if (n == 0 || n == 1)
        return 1;
 
    return n * fact(n - 1);
}
Функция работает так. Например, передаём 0 или 1. Она проверяет базис, видит, что он выполняется, и возвращает 1.
Если передаём, например 4. Тогда. Функция проверяет базис. Он не выполняется. И функция как-бы возвращает n * fact(n - 1). Т.е. чтобы вернуть результат, ей сначала надо вызвать саму себя. Будет вызов 4 * fact(3).
Теперь у нас вызвана новая функция fact с параметром 3. Она вообще не знает, что её вызвала другая функция, и что до этого был какой-то параметр 4, она просто должна выполнить некоторые действия со своим параметром - тройкой. А действия аналогичные. Проверяем базис. Не выполняется - возвращаем 3 * fact(2), т.е. снова происходит рекурсивный вызов функции fact. Она делает то же самое, сверяет базис, и, так как он не выполняется, вызывает себя рекурсивно с параметром 1. И тут-то начинается самое интересное. Базис выполняется. Функция больше не вызывает себя рекурсивно - она возвращает 1. А куда возвращает? А туда, откуда её вызвали, т.е. в предыдущий вызов функции, тот, где параметром была двойка. А там, как мы помни, стояло следующее: return 2 * fact(1);. Т.к. fact(1) уже вычислен и равен 1, получается, что там, по сути, стоит return 2 * 1;. Т.е. функция, у которой параметр был 2, вернёт 2. А куда? А, опять же, туда, откуда её вызвали, т.е. в ещё одну функцию fact, у которой параметр был 3. Там, как мы помним, было return 3 * fact(2);, но fact(2) уже вычислен - он равен 2. Тогда функция fact(3) вернёт 3 * 2, т.е. 6. Вернёт, как нетрудно догадаться, в функцию fact(4), из которой была вызвана. Там было return 4 * fact(3);, т.е. return 4 * 6;. Получается, что fact(4) вернёт 24. А куда? А туда, откуда её вызвали... Но мы же её вызвали из функции main. Вот это да! Вот так шутя мы вычислили факториал 4. Будь на месте 4 другое число - просто глубина рекурсии была бы больше, но суть бы осталась. Вся прелесть рекурсии в том, что функции пофиг, кто её вызывает, функция main, другая функция программы или же та же самая функция. Ей об этом знать не надо, ей надо просто выполнить арифметические операции и вернуть ответ. И на каждом из уровней рекурсии ей, можно сказать, даже всё равно, что она вызывает сама себя. С её точки зрения это выглядит как вызов любой другой функции, необходимой для получения результата. Она просто дождётся, когда эта вызванная функция выполнится и вернёт результат.
 
Текущее время: 17:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru