Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Рекурсия+help
Форумы портала PHP.SU » PHP » Программирование на PHP » Рекурсия+help

Страниц (1): [1]
 

1. nucliar - 05 Декабря, 2009 - 15:02:03 - перейти к сообщению
Напишите рекурсивную функцию вычисления факториала. - вот задание
Я php изучаю 2-й день, Так я и не понял что такое рекурсия ( объясните пожалуйста )
Попробывал решить эту задачу хоть как нибудь
<?PHP
PHP:
скопировать код в буфер обмена
  1. function faktorial($n)
  2. {
  3. if ($n == 0) return 1;
  4. else
  5. {
  6. $n=1;
  7. for ($n=1;$n>=$i;$n++)
  8. {
  9. for ($i=1;$i<=$n; $i++)
  10. {
  11. $n*=$n;
  12. }
  13. }
  14. }
  15. return $n
  16. }
  17. $b=5;
  18. echo faktorial($b)
  19. ?>

НО тут ошибку выдает..пишет что неожиданая скобка, я не понял почимум...подскажите где у меня ошибка и буду очень благодарен если все-таки решите эту задачу рекурсивным способом
2. Champion - 05 Декабря, 2009 - 15:12:16 - перейти к сообщению
Давай напиши сначала тогда без рекурсии правильно. Синтаксические ошибки ищи сам. Посчитай скобки пальцами.
3. nucliar - 05 Декабря, 2009 - 15:20:46 - перейти к сообщению
Champion пишет:
Давай напиши сначала тогда без рекурсии правильно. Синтаксические ошибки ищи сам. Посчитай скобки пальцами.

Их 8.Скорее всего какие то не нужны, но я не знаю какие. Странно почему у вас нету ответов на задания Огорчение
4. Мелкий - 05 Декабря, 2009 - 15:26:53 - перейти к сообщению
А поиском пользоваться не пробовали? Факториалы давно уже написаны и именно на их примере рекурсию и показывают как правило...
http://www.php.su/functions/custom/?3
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function factorial($x) {
  3. if ($x === 0) return 1;
  4. else return $x*factorial($x-1);
  5. }
  6. echo factorial(7);
  7. ?>


А у вас PHP должен сильно обижаться на отсутсвие ; в 15 и 18 строках
5. nucliar - 05 Декабря, 2009 - 15:38:50 - перейти к сообщению
Я не понял почему оно подсчитует 7*6*5*4*3*2*1 , в этой строке else return $x*factorial($x-1) , вроде только 7*6 описуется, почему оно как цикл обратно начинает подсчитывать?
6. Мелкий - 05 Декабря, 2009 - 15:47:16 - перейти к сообщению
потому что считает не 7*6, а 7*factorial(6), factorial(6) высчитывает 6*factorial(5) и так далее вызывает саму себя, что и называется рекурсией. Завершается рекурсия вызовом factorial(1), который возвращает в вызывающую функцию (factorial(2)) ответ 1.
7. Champion - 05 Декабря, 2009 - 15:51:54 - перейти к сообщению
nucliar пишет:
Их 8.Скорее всего какие то не нужны, но я не знаю какие.
Это ты про скобки? Ты погоди, пока с факториалами разбираться. Разберись с синтаксисом. Ответы тебе зачем? Скопировать и посмотреть?
8. nucliar - 05 Декабря, 2009 - 17:09:04 - перейти к сообщению
Champion пишет:
nucliar пишет:
Их 8.Скорее всего какие то не нужны, но я не знаю какие.
Это ты про скобки? Ты погоди, пока с факториалами разбираться. Разберись с синтаксисом. Ответы тебе зачем? Скопировать и посмотреть?

Чтоб увидить что я не так делаю и понять как нужно делать на правильном примере ( в данном случаее ответе )... а без ответа я не смогу понять...
(Добавление)
Мелкий пишет:
потому что считает не 7*6, а 7*factorial(6), factorial(6) высчитывает 6*factorial(5) и так далее вызывает саму себя, что и называется рекурсией. Завершается рекурсия вызовом factorial(1), который возвращает в вызывающую функцию (factorial(2)) ответ 1.

Точно) спасибо )
9. EuGen - 07 Декабря, 2009 - 10:43:48 - перейти к сообщению
Чтобы понять рекурсию, надо понять рекурсию (с)
10. Champion - 07 Декабря, 2009 - 13:20:52 - перейти к сообщению
Рекурсия[dot] Статья с абсурдопедии

 

Powered by ExBB FM 1.0 RC1