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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Рекурсия+help

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
nucliar
Отправлено: 05 Декабря, 2009 - 15:02:03
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




Напишите рекурсивную функцию вычисления факториала. - вот задание
Я 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. ?>

НО тут ошибку выдает..пишет что неожиданая скобка, я не понял почимум...подскажите где у меня ошибка и буду очень благодарен если все-таки решите эту задачу рекурсивным способом

(Отредактировано автором: 05 Декабря, 2009 - 15:03:15)

 
 Top
Champion Супермодератор
Отправлено: 05 Декабря, 2009 - 15:12:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Давай напиши сначала тогда без рекурсии правильно. Синтаксические ошибки ищи сам. Посчитай скобки пальцами.
 
 Top
nucliar
Отправлено: 05 Декабря, 2009 - 15:20:46
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




Champion пишет:
Давай напиши сначала тогда без рекурсии правильно. Синтаксические ошибки ищи сам. Посчитай скобки пальцами.

Их 8.Скорее всего какие то не нужны, но я не знаю какие. Странно почему у вас нету ответов на задания Огорчение

(Отредактировано автором: 05 Декабря, 2009 - 15:21:21)

 
 Top
Мелкий Супермодератор
Отправлено: 05 Декабря, 2009 - 15:26:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




А поиском пользоваться не пробовали? Факториалы давно уже написаны и именно на их примере рекурсию и показывают как правило...
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 строках

(Отредактировано автором: 05 Декабря, 2009 - 15:32:18)



-----
PostgreSQL DBA
 
 Top
nucliar
Отправлено: 05 Декабря, 2009 - 15:38:50
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




Я не понял почему оно подсчитует 7*6*5*4*3*2*1 , в этой строке else return $x*factorial($x-1) , вроде только 7*6 описуется, почему оно как цикл обратно начинает подсчитывать?
 
 Top
Мелкий Супермодератор
Отправлено: 05 Декабря, 2009 - 15:47:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




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


-----
PostgreSQL DBA
 
 Top
Champion Супермодератор
Отправлено: 05 Декабря, 2009 - 15:51:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




nucliar пишет:
Их 8.Скорее всего какие то не нужны, но я не знаю какие.
Это ты про скобки? Ты погоди, пока с факториалами разбираться. Разберись с синтаксисом. Ответы тебе зачем? Скопировать и посмотреть?
 
 Top
nucliar
Отправлено: 05 Декабря, 2009 - 17:09:04
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




Champion пишет:
nucliar пишет:
Их 8.Скорее всего какие то не нужны, но я не знаю какие.
Это ты про скобки? Ты погоди, пока с факториалами разбираться. Разберись с синтаксисом. Ответы тебе зачем? Скопировать и посмотреть?

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

Точно) спасибо )
 
 Top
EuGen Администратор
Отправлено: 07 Декабря, 2009 - 10:43:48
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Чтобы понять рекурсию, надо понять рекурсию (с)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Champion Супермодератор
Отправлено: 07 Декабря, 2009 - 13:20:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB