Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 04.04.2015
Сообщений: 11
1

Рекурсивные функции

10.04.2015, 13:18. Показов 1792. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток, есть вопрос по поводу одного момента из рекурсивной функции вычисления Факториала. Есть пример:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
function factorial($n)
{
if ($n == 0) {
return 1; 
}
else {
return $n * factorial($n-1);
}
}
for ($i = 0; $i <= 50; $i++) {
echo ($i +1 . ") " . factorial($i) . "<br /> ");
}
echo("...\n")
вот момент с
PHP
1
return $n * factorial($n-1);
меня смущает, я просто не могу понять, почему $n умножаясь на функцию вычисляет ее $n-ое кол. раз, а не просто умножает результат функции на переменную $n. Перерыл кучу литературы, но нигде не смог найти для себя ответа. Может кто-нибудь мне обьяснит доходчиво почему именно так делает и никак иначе?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2015, 13:18
Ответы с готовыми решениями:

Рекурсивные функции
Определите закономерность формирования членов последовательности. Найдите N-ый член...

Как работают рекурсивные функции?
Доброго. Читая документацию я наткнулся на следующий пример (здесь, #6): &lt;?php function...

Рекурсивные функции
привет всем! пытаюсь понять рекурсию, нужна небольшая помощь подскажите, как сделать рекурсивную...

Рекурсивные и не рекурсивные функции (вычисление суммы всех натуральных чисел от 1 до n)
Всем привет. Заранее извиняюсь за мб глупые вопросы и навязчивость. Но у меня есть одна просьба. ...

3
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
10.04.2015, 13:29 2
Лучший ответ Сообщение было отмечено Эльт как решение

Решение

Цитата Сообщение от Эльт Посмотреть сообщение
а не просто умножает результат функции на переменную $n
именно это и происходит.
n! = 1, n == 0
n! = n * (n-1)!, n > 0
3! = 3 * (3-1)! = 3 * 2! = 3 * (2 * (2-1)!) = 3 * (2 * (1 * (0!))) = 3 * (2 * (1 * 1))
1
1 / 1 / 0
Регистрация: 04.04.2015
Сообщений: 11
10.04.2015, 13:41  [ТС] 3
Цитата Сообщение от Jewbacabra Посмотреть сообщение
именно это и происходит.
n! = 1, n == 0
n! = n * (n-1)!, n > 0
3! = 3 * (3-1)! = 3 * 2! = 3 * (2 * (2-1)!) = 3 * (2 * (1 * (0!))) = 3 * (2 * (1 * 1))
т.е. сама рекурсия происходит в function($n - 1), а $n * действует так как я и предполагал, как в обычной алгебре! Спасибо!!! Пол ночи ломал себе голову, заснуть не мог...
0
Заблокирован
10.04.2015, 13:42 4
Цитата Сообщение от Эльт Посмотреть сообщение
меня смущает, я просто не могу понять, почему $n умножаясь на функцию вычисляет ее $n-ое кол. раз, а не просто умножает результат функции на переменную $n.
Оно как раз и умножает результат функции на переменную. Если не можеш понять подставь вместо переменной реальные цифры и проследи путь.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
echo factorial(2);
if (2 == 0) {//нет не равно
return 1; 
}
else {
return 2 * factorial(2-1); //тут опять срабатывает функция а значит заного
}
//тут заного теперь с 1 так как 2-1=1
if (1 == 0) {//нет не равно
return 1; 
}
else {
return 1 * factorial(1-1); //тут опять срабатывает функция а значит заного
}
//тут заного теперь с 0 так как 1-1=0
if (0 == 0) {//вот есть равенство 
return 1; // тут вернётся один
}
else {
return 0 * factorial(0-1);//теперь это уже не работает
}
В итоге получается такая цепочка:
3 вкладка возвращает 1
2 вкладка возвращает 1 * 1 = 1
1 вкладка возвращает 2 * 1 = 2
1
10.04.2015, 13:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2015, 13:42
Помогаю со студенческими работами здесь

Рекурсивные функции, функции высшего порядка, преобразование императивных программ в функциональные
Простые рекурсивные функции для обработки списков: А) (ATOM-LIST x) проверяет, является ли х ...

рекурсивные функции
Напишите рекурсивную функцию, которая вычисляет длину строки.

Рекурсивные функции
Написать рекурсивную функцию для вычисления максимального элемента массива из n элементов, цикл не...

рекурсивные функции
помогите ррешить!!!!! на С++ Записать алгоритм Евклида вычисления наибольшего общего делителя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru