[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: рекурсия
Egoist007
щас на даном этапе изучения php я столкнулся с рекурсиями и не непонял работу его задача поставлена что б рекурсию вывести через функцию вот сама задача
"С помощью рекурсии организуйте функцию возведения числа в степень. Формат:
function power($val, $pow), где $val – заданное число, $pow – степень.";
вот как я сделал
"
function power($val,$pow)
{
if ($pow != 1)
{
return $val * power ($val, $pow - 1);
}
return 1;
}
echo power(2, 3);

"
степень возводит но допустим если надо степень в 9 то вписывать надо 10.



Спустя 45 минут, 9 секунд (12.02.2011 - 00:09) inpost написал(а):
Egoist007
А в чём собственно вопрос?

Спустя 7 минут, 49 секунд (12.02.2011 - 00:17) Egoist007 написал(а):
почему степень возводит если в 2 надо то ставить значение 3, а когда $pow -1 убираю то апач матюкается

Спустя 21 минута, 37 секунд (12.02.2011 - 00:39) inpost написал(а):
function power($val,$pow,&$result){
if ($pow > 1)
{
$result *= $val; // $result = $result * $val;
power($val, --$pow, $result);
}
}

$result = $val = 2;
$pow = 3;
power($val, $pow, $result);
echo $result;

Спустя 8 минут, 44 секунды (12.02.2011 - 00:47) Egoist007 написал(а):
что-то не понял для чего мы в функции ответ умножили на заданое число
и что значит вот это
"&$result" почему знак (&) ставится перед $result?

Спустя 7 минут, 20 секунд (12.02.2011 - 00:55) inpost написал(а):
& - связка, это как работа с глобальной переменной, меняясь в функции она меняется и вне её.
Чтобы возвести 2 в третью степень надо: 2*2*2. В рекурсии:
1) 2*2 = 4.
2) 4*2 = 8.
3) вместо return я связал $result.

Спустя 9 минут, 30 секунд (12.02.2011 - 01:04) Egoist007 написал(а):
не могу сообразить почему мы множим число на подальший ответ

Спустя 17 минут, 55 секунд (12.02.2011 - 01:22) inpost написал(а):
чтобы получить результат всех умножений =)

Спустя 7 минут, 2 секунды (12.02.2011 - 01:29) Egoist007 написал(а):
ну это понятно, я как смотрю на скрипт и вроде понимаю но с другйо стороны вообещ не понимаю ))) еси еще не сложно подскажи сразу какийто видео по урокам и книги)

Спустя 14 минут, 18 секунд (12.02.2011 - 01:44) inpost написал(а):
Egoist007
Этому, увы, в книгах и видео-уроках не научат, тут уже настало время шевелить извилинами. Поэтому надо практиковаться, развивать своё мышление (логические задачки, всякие задания вроде этих).

$result = 1;
function dodik(&$result)
{
++$result;
}
dodik($result);
dodik($result);
echo $result; // Вывелось 3, так как 2 раза увеличивали значение на еденицу.



$result = 1;
function dodik(&$result)
{
if($result < 10)
dodik(++$result);
}
dodik($result);
echo $result; // Ответ будет 10


$a = 7;
$a *= 2;
echo $a; // Ответ будет 14.


Достаточно просто всё... мануалы, книга Котерова, irbis-team.com, и вообще, этот форум и общение с другими программистами.

Спустя 3 минуты, 34 секунды (12.02.2011 - 01:47) Egoist007 написал(а):
ок спасибо, а сколько ты уже в этой сфере времени занимаешся?

Спустя 1 минута, 12 секунд (12.02.2011 - 01:48) inpost написал(а):
На форуме: 1 год, 2 месяца, 4 дня
+
1,5 месяц до этого учился по Попову =)

Спустя 13 минут, 2 секунды (12.02.2011 - 02:01) Egoist007 написал(а):
а что у Попова норм уроки?

Спустя 25 минут, 16 секунд (12.02.2011 - 02:27) inpost написал(а):
Egoist007
конечно нет, если ты уже пытаешься такую функцию писать, то ты давно прошел уровень тех, кто обучается по Попову =)

Спустя 6 часов, 30 минут, 8 секунд (12.02.2011 - 08:57) Michael написал(а):
Egoist007, твоя функция структурно верна, только надо исправить:
if ($pow != 0)


т.к. по сути функция должна сделать $pow итераций, включая и 1-ую.

Спустя 4 часа, 32 минуты, 32 секунды (12.02.2011 - 13:29) Egoist007 написал(а):
да заработало)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.