Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];

Вниз

Тоже пятничная задачка :о)   Найти похожие ветки 

 
McSimm ©   (2007-05-05 00:09) [80]


> Вы не верите что если неопытному в программировании студенту
> показать итеративный вариант и рекурсивный вариант ему не
> будет понятнее итеративный?

Понятнее что ?


 
Rouse_ ©   (2007-05-05 00:09) [81]


> Если бы программист, работающий у меня, применял рекурсию
> для вычисления факториала, я бы нанял кого-то другого.

Я вот сидел и долго думал, а вот в каком ракусе тогда можно применить рекурсивный алгоритм в плане обучения? Я вот сидел и долго думал, а вот в каком ракусе можно описить "мощность" рекурсионного алгоритма? Я вот сидел и долго думал, а вот сколько у тебя сейчас работает програмистов? :)


 
default ©   (2007-05-05 00:11) [82]

Rouse_ ©   (05.05.07 00:09) [81]
в ракурсе, например, поиска выхода в лабиринте
McSimm ©   (05.05.07 00:09) [80]
понять как оно работает или хотя бы что оно делает


 
Rouse_ ©   (2007-05-05 00:13) [83]


>  ракурсе, например, поиска выхода в лабиринте

Вах как... Занимательно... Вот при таком прямолинейном брутфорсном подходе следует задуматься о квалификации...


 
McSimm ©   (2007-05-05 00:14) [84]


> default ©   (05.05.07 00:11) [82]

совсем не читаете что вам пишут.

Попробую перефразировать.
Как с помощью более понятного итеративного алгоритма объяснить принципы рекурсии ?

Или вы считаете, что в книгах по программированию учат факториалы вычислять?


 
McSimm ©   (2007-05-05 00:16) [85]


> рекурсивный вариант функции трудней для понимания (**чего?**),
> чем итеративный вариант:...

вот я и говорю - по ушам проехались.


 
default ©   (2007-05-05 00:16) [86]

Rouse_ ©   (05.05.07 00:13) [83]
хм
у Вас есть сравнивая по понятности итеративная версия обхода лабиринта в поисках выхода?


 
default ©   (2007-05-05 00:21) [87]

McSimm ©   (05.05.07 00:14) [84]
я всё понял
возможно тут автора обвинить в лёгком передёргивании, но вцелом он прав
не было бы никаких возмущений если бы в этих книгах говорилось, что это лишь как пример и что не стоит использовать такую рекурсию в реалных программах и почему и показывались всегда примеры того, где без рекурсии действительно сложно


 
Rouse_ ©   (2007-05-05 00:21) [88]


> у Вас есть сравнивая по понятности итеративная версия обхода
> лабиринта в поисках выхода?

Конечно, это-же математическая модель... Зачем рукурсивно бить лбом поле в поисках выхода, если можно рассчитать нормали на основании векторов препятствий?


 
default ©   (2007-05-05 00:25) [89]

Rouse_ ©   (05.05.07 00:21) [88]
и по понятности оно ничем не уступает?
но речь не об конкретике, может пример с лабиринтом и был не совсем удачным, вопрос в том чтобы показывать примеры рекурсии такие в которых без рекурсии было гораздо сложнее, непонятнее и тд


 
Rouse_ ©   (2007-05-05 00:27) [90]


> вопрос в том чтобы показывать примеры рекурсии такие в которых
> без рекурсии было гораздо сложнее

Найти все *.avi на диске С - что может быть конкретней? :)


 
default ©   (2007-05-05 00:30) [91]

Rouse_ ©   (05.05.07 00:27) [90]
вполне вариант, кто ж спорит
вот я спецом открыл щас одну книгу с разделом про рекурсию
там как раз Фибоначчи через рекурсию и итерацию
и сказано лишь, что  с рекурсией - лаконичнее
так что Макконелл прав со своими обвинениями пусть и чуть-чуть перегибает


 
Rouse_ ©   (2007-05-05 00:42) [92]


> Макконелл прав со своими обвинениями пусть и чуть-чуть перегибает

Рекурсия это билет в оба конца.


 
Rouse_ ©   (2007-05-05 00:44) [93]

Да кстати, Сань, завязывай называть меня на Вы - чай не первый день на форуме :)


 
Alx2 ©   (2007-05-05 01:11) [94]

Немного для мозга есть в другой в задачке:
Дан массив N чисел. Поставить меж этими числами знаки арифм. операций и  скобки так, чтобы в результате получилось заранее заданное число M.

И что-б максимально просто и понятно. :)


 
Зюзя   (2007-05-05 04:11) [95]

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

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

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

Во-первых, потому что использование очень даже предсказуемое: для 64-битных вычислений максимальный результат при вычислении 65!, дальше - переполнение, что является ограничением для любого алгоритма (использование сверхбольших чисел и специальных алгоритмов не беру во внимание), а на 65 рекурсивных вызовах ничего непредсказуемого произойти не может.

А во-вторых, с такой позиции, увольнять надо любого, кто вообще для этого хоть какие-то алгоритмы использует, ибо для 65 чисел надо использовать заранее просчитанную табличку. И Range Check. И все. Никаких алгоритмов. И выполнение быстрое, и непредсказуемости никакой.

P.S. И запись в трудовой книжке: "Он не умел считать факториал"...


 
Думкин ©   (2007-05-05 05:00) [96]

>  для 64-битных вычислений максимальный результат при вычислении
> 65!,

Ни разу не так, обвал произойдет гораздо раньше.


 
Зюзя   (2007-05-05 05:19) [97]

Виндовый калькулятор работает с 8-байтными числами.
И функция факториала в нем есть.
Проверить можно.


 
SerJaNT ©   (2007-05-05 07:44) [98]

<?php  
class chisla
{
   var $num = array();
   
   /**
    * Добавляем число
    *
    * @param integer $c
    */
   function add( $c )
   {
       if ( !is_float($c) )
       {
           $this->num[] = $c;
       }
   }
   
   /**
    * Выводим
    *
    */
   function show()
   {
       foreach ( array_reverse( $this->num ) AS $chislo)
       {
           if ( fmod( $chislo, 2) == 0 )
           {
               print $chislo . "<br>";
           }
       }
   }
}

$z = new chisla();

/**
* Заполняем любыми числами
*/
$z->add(15);
$z->add(5);
$z->add(6);
$z->add(-5.2);
$z->add(7.88888);
$z->add(0.9999);
$z->add(1);
$z->add(0.2);
$z->add(-8);

/**
* Выводим числа по условию
*/
$z->show();
?>


 
GrayFace ©   (2007-05-05 11:20) [99]

То, что факториал в учебниках вычисляется с помощью рекурсии весьма вредно. После этого не задумываясь пишешь рекурсию когда нужен факториал и даже в голову не приходит сделать без нее. (так было на днях, правда, это было на олимпиаде, а там думать некогда, не до эффективности :) )

default ©   (04.05.07 19:57) [32]
рекурсия тут совсем ни к месту
keep it simple, stupid
а если брать стек и подобное, то уж лучше Insert в 0 позицию, что поймёт всяк и каждый

Зато рекурсия, в отличии от TStack, сохраняет эффективность проги.

Rouse_ c   (05.05.07 00:21) [88]

> у Вас есть сравнивая по понятности итеративная версия обхода
> лабиринта в поисках выхода?

Конечно, это-же математическая модель... Зачем рукурсивно бить лбом поле в поисках выхода, если можно рассчитать нормали на основании векторов препятствий?

Вряд ли это будет лучше.


 
GrayFace ©   (2007-05-05 11:22) [100]

Все зависит от того, что дальше с нормалями делать.


 
Юрий Зотов ©   (2007-05-05 13:42) [101]

Вариант на PL/1. Прост до безобразия, потому что использует встроенные в сам язык стековые переменные. По той же причине не требует никаких дополнительных модулей, библиотек и т.п.

example: procedure options(main);
dcl I controlled;
on endfile(sysin)
begin
 free(I);
 goto L2;
end;
L1: allocate(I);
 get list(I);
 if I and 1 = 1 then free(I);
goto L1;
L2: do while(allocation(I));
 put list(I);
 free(I);
end;
end example;

Задачка в некоторой степени классическая и, имхо, довольно интересно посмотреть, как она решается разными средствами. Вариант [78] потряс меня своей лаконичностью, но что касается простоты - имхо, без бутылки в нем фиг разберешься.
:о)


 
Думкин ©   (2007-05-06 05:05) [102]


> Зюзя   (05.05.07 05:19) [97]

Ну так возьмите на себя труд и проверьте. :) Удивитесь.

> GrayFace ©   (05.05.07 11:20) [99]

Хотя я и знал, что "правильно" через рекурсию, но когда у меня на одном собеседовании возникла и эта задача, то я решил ее без оной. Что я читал не так? Видимо, читая надо видеть и еще что-то кроме фиги?
:)

> Юрий Зотов ©   (05.05.07 13:42) [101]

Ну, собственно тогда Alx2  в точку пробил о ветке с функязыками - про встроенные в язык средства.


 
GrayFace ©   (2007-05-07 01:25) [103]

Думкин ©   (06.05.07 5:05) [102]
Хотя я и знал, что "правильно" через рекурсию, но когда у меня на одном собеседовании возникла и эта задача, то я решил ее без оной.

Видимо на собеседовании была цель решить именно это задачу, а не побыстрее набить код чтоб работало.


 
Думкин ©   (2007-05-07 05:32) [104]

> GrayFace ©   (07.05.07 01:25) [103]

Штука в том, что не факториал в учебниках вычисляют, а на его примере показывают суть рекурсии. Не более. Если это понимать, то проблем никаких не возникает.


 
Думкин ©   (2007-05-07 05:45) [105]

> GrayFace ©   (07.05.07 01:25) [103]

Ведь есть классические задачи про трубы в которые втекает и вытекает и про лодки от города А до Б, но никто же не пользуется для реальных труб и транспортных средств подобными расчетами и ничего - Мир не рухнул.


 
Romkin ©   (2007-05-07 10:48) [106]

Думкин, тут вопрос в том, что вычисление факториала через рекурсию мало что дает. Рекурсию-то он объясняет, но не объясняет ее возможностей и путей применения.
Это годится, как и бассейн с трубами, только для средних классов школы. Но никак не для серьезных учебников.


 
Romkin ©   (2007-05-07 10:50) [107]

Кстати, на мой взгляд, у Sha ©   (04.05.07 20:16) [42] решение наилучшее :)


 
mrco   (2007-05-07 18:20) [108]

Что-то не видно моего любимого языка...

(print (reverse (loop while (numberp (setq r (read))) if (oddp r) collect r ) ) )


 
oldman ©   (2007-05-07 18:22) [109]

Сама задача абсурдная какая-то...
Читай ты данные в массив и выводи их с конца только четные.
А смысл данной задачи - за пределами моих умственных способностей.


 
Павел Калугин ©   (2007-05-08 01:10) [110]

> [6] Юрий Зотов ©   (04.05.07 15:20)

на***/1 намекаешь?


 
Думкин ©   (2007-05-08 06:00) [111]

> Romkin ©   (07.05.07 10:48) [106]

Ромкин, если дело ограничивается только факториалом - то другое дело. Но для ввода в понятие рекурсия - факториал вполне нормальный объект. В чем проблема? Я вот не пойму чем таким факториал перебежал дорогу рекурсии?


 
Romkin ©   (2007-05-08 11:35) [112]

Тем, что факториал - концевая рекурсия. И легко разворачивается в цикл. И при этом создается впечатление, что рекурсия нафиг не нужна и заменяется циклом.
Почему не дать задачу, алгоритм с рекурсией для которой проще, чем без нее?


 
Думкин ©   (2007-05-08 11:38) [113]

> Romkin ©   (08.05.07 11:35) [112]

А кто-то мешает потом и ее дать? Все-таки не вижу препятствий для иллюстрации ввода в рекурсивное через факториал. Но это уже по кругу.


 
McSimm_ ©   (2007-05-08 12:03) [114]


> Почему не дать задачу, алгоритм с рекурсией для которой
> проще, чем без нее?

Это можно потом.
Наверное это тебе сейчас кажется все тривиальным. Хотя может ты и сразу вник. А я очень живо помню, как постигал рекурсию, как укладывал в своем представлении ее итерации. Это очень трудно в начале. И F(n)=n*F(n-1) мне очень помог, как и ряд других простых примеров, хорошо укладывающихся в воображении.

И ни капельки не помешал. Как только я прочувствовал этот метод (честно говоря я был восхищен им), начал испытывать его для совершенно разнообразных задач. (до сих пор помню свой восторг от простоты получившегося рекурсивного алгоритма решения ханойских башен из любого начального состояния.)

А уже понимание плюсов и минусов на порядок легче дается.


 
Romkin ©   (2007-05-08 12:11) [115]


> А кто-то мешает потом и ее дать? Все-таки не вижу препятствий
> для иллюстрации ввода в рекурсивное через факториал. Но
> это уже по кругу.

Дык как правило не дают! :)



Страницы: 1 2 3 вся ветка

Форум: "Прочее";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.67 MB
Время: 0.048 c
2-1179224410
RomanLN
2007-05-15 14:20
2007.06.03
как связать SQL с DBGrid


2-1179226884
Provodnick
2007-05-15 15:01
2007.06.03
Строку с #0 в XML


15-1178245644
Slider007
2007-05-04 06:27
2007.06.03
С днем рождения ! 4 мая


2-1179220828
Apachi
2007-05-15 13:20
2007.06.03
помогите пожалуста понять тип Double


15-1178208918
Ёжик
2007-05-03 20:15
2007.06.03
Объявление экземпляра класса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский