Jump to content

Програмирање - дигресије

Оцени ову тему


Препоручена порука

Много ми то нешто рекурзивно... Мени је рекурзија била начин размишљања на факсу - супер елегантно и фенси, док се нисам шокирао да је у суровом капитализму не цене баш превише. :)

ΜΟΛΩΝ ΛΑΒΕ

Link to comment
Подели на овим сајтовима

пре 22 минута, Grizzly Adams рече

Много ми то нешто рекурзивно... Мени је рекурзија била начин размишљања на факсу - супер елегантно и фенси, док се нисам шокирао да је у суровом капитализму не цене баш превише. :)

Па види, јасно је одавно да су неки проблеми ко створени за рекурзију, а неки баш и нису. Разлог зашто се ”не цени у капитализму” (чак ни код оних проблема код којих је боље решење, на пример пролазак кроз стабла) су вероватно

1) глупи менаџери (неоправдано) 

2) перформансе (оправдано). Да те stack overflow не би звизнуо у лице, мораш да напишеш ”репну рекурзију” коју онда компајлер оптимизује у петљу. 

3) многи компајлери императивних језика уопште не могу да одраде споменуту отимизицају. Мислим да C# може. Swift, на жалост, не може због специфичног начина управљања меморијом (аутоматско бројање референци, уместо сакупљача отпадака). Тако да ту рекурзија није препоручљива за рад са великим секвенцама, али за релативно мање нема проблема, ако је у питању природно решење.

4) чак се и у функционалним језицима избегава директна рекурзија јер је често тежа за  разумевање. Уместо тога се користе ”LINQ” функције (map, filter, reduce...), а те функције су импментиране користећи рекурзију. Haskеll уопште нема петље, рекурзија је једини начин, док F# има петље, али и даље користе рекурзију за имплементацију јер је у овом случају јако читљива и природна, а подједнако перформантна захваљујући оптимизацијама самог F# компајлера. 

Уф... :ani_biggrin:

***

Али све ово горе није битно јер мој пример уопште није рекурзиван. Само делује тако јер Swift дозвољава иста имена за функције са различитим потписом (overloading) чак и ако се само разликују враћене вредности. Ако обратиш пажњу, видећеш да су две brojObrtaja функције различите. Компајлер на основу типа и броја аргумената позива унутрашњу функцију, а не спољашњу рекурзивно. А перформансе су вероватно јако сличне перформансама решења с петљом. Нисам мерио, али нема разлога да не буду знајући како је Swift импменетиран. Овај низ кога прослеђујемо унутрашњој помоћној функцији као аргумент се неће копирати јер га не мењамо унутар функције. Можда је најбоље дати друго име унутрашњој функцији и избегнути забуну. :)

 

P. S.

Рекурзију је могуће имплементирати и са анонимним функцијама.

https://en.wikipedia.org/wiki/Fixed-point_combinator

Link to comment
Подели на овим сајтовима

пре 2 минута, Juanito рече

Али све ово горе није битно јер мој пример уопште није рекурзиван.

Пало ми на памет, ал реко ај да одвалим па да видим шта ће да се деси... ;)

И нисам погрешио! Данке шен за појашњење, нисам знао неке ствари што си написао. :skidamkapu:

  • Волим 1

ΜΟΛΩΝ ΛΑΒΕ

Link to comment
Подели на овим сајтовима

Ja svaki put gledam ovu temu misleći da neko ima pitanje vezano za moje polje, međutim samo vidim php. Ako nekom bude trebala pomoć u vezi HTML5, CSS3, JavaScript, framework i biblioteke vezane za Front End Development, neka me spomene (@). Ovako svaki put kad vidim da je neko nešto napisao ja otvorim i vidim da nije moje polje znanja. 

200_OK.jpg

Mornië alantië

Link to comment
Подели на овим сајтовима

пре 10 часа, ИгорМ рече

Имаш одличних књига и ваљало би их савладати поред видео туторијала... ако си добар са енглиш могао би ти проследити нешто од тога...

Baš sam hteo da pitam za neke knjige. Prosledi! :)

пре 10 часа, ИгорМ рече

Много ми помажу видео туторијали професионалаца. Ту се види практично знање и "пропер веј" како нешто треба да се одради.

I za ovo sam hteo da pitam. Naime, imam problem kada pratim više izvora... onda dosta toga što propratim već je rečeno ranije kod nekog drugog. Nekad mi se učini da ću nešto novo saznati međutim samo kaže na drugi način isto ono što je ovaj prethodni rekao. Tako da u tom slučaju gubim vreme, vrtim se krug.

Idealno bi bilo kada bih pratio jedan jedini izvor (neki youtube kanal) koji bi sve obradio, kada bi jedan bio dovoljan. Ali koji je najbolji? Dobio sam preporuku i za neki naš:

https://www.youtube.com/user/skolaphpa/featured

Link to comment
Подели на овим сајтовима

пре 1 сат, Tumaralo. рече

I za ovo sam hteo da pitam. Naime, imam problem kada pratim više izvora... onda dosta toga što propratim već je rečeno ranije kod nekog drugog. Nekad mi se učini da ću nešto novo saznati međutim samo kaže na drugi način isto ono što je ovaj prethodni rekao. Tako da u tom slučaju gubim vreme, vrtim se krug.

Не мора да значи да је губљење времена. Веома је битно да се усвоји начин размишљања. Често нешто знаш тек када видиш. Ал треба да се човек сети да примени неко знање у одређеној ситуацији. Већина проблема се може тачно решити на више начина. А питање се намеће који начин изабрати, шта је најбоље за конкретан проблем који човек решава.

Програмирање ти је као писање књига. Програмски језици су ти као обични језици. Ти да би написао роман, мораш да знаш српски језик, правила, граматику, да знаш значење речи. Али те то знање не чини писцем. Не можеш само са знањем српског језика (вокабулара, и граматике) написати роман као што је Ана Карењина. Али да не идемо на врхунске књиге, него да се вратимо у школу, колико год ти добро знао српски језик, то не значи да ћеш писати одличне саставе, и да ћеш добијати петице, а не двојке. А исто, никада нећеш научити све речи, него само вежба, вежба, и учење.

Дакле, само вежбај, решавај конкретне задатке, али наравно и читај књиге, гледај како други решавају неке друге проблеме и задатке...

Link to comment
Подели на овим сајтовима

пре 5 часа, Tumaralo. рече

Baš sam hteo da pitam za neke knjige. Prosledi! :)

I za ovo sam hteo da pitam. Naime, imam problem kada pratim više izvora... onda dosta toga što propratim već je rečeno ranije kod nekog drugog. Nekad mi se učini da ću nešto novo saznati međutim samo kaže na drugi način isto ono što je ovaj prethodni rekao. Tako da u tom slučaju gubim vreme, vrtim se krug.

Idealno bi bilo kada bih pratio jedan jedini izvor (neki youtube kanal) koji bi sve obradio, kada bi jedan bio dovoljan. Ali koji je najbolji? Dobio sam preporuku i za neki naš:

https://www.youtube.com/user/skolaphpa/featured

Проследио сам ти па загреј столицу :) ... што се тиче видео тута... пратио сам и ја доста различитих и као што речеЂорђе није лоше видети како то још неко ради. Ја сам имао срећу да једно време приступам као премиум члан фантастичном порталу https://laracasts.com/ мада их и сада посећујем. Ту су https://www.udemy.com/ и https://www.lynda.com/

Сви они нуде један део лекција бесплатно али се може уплатити чланарина на месечном или годишњем нивоу или се платати лекције по потреби и нивоу знања.

Овде имаш доста тога и на српском, већи део је преведен и ок је извор за учење: http://phpsrbija.github.io/php-the-right-way/

Link to comment
Подели на овим сајтовима

https://www.codecademy.com/learn/all

Ovaj je dobar za učenje.

  • Волим 1

Најдубља молитва јесте  молитва без икаквих речи када у тишини ума једноставно живимо у присуству Божијем. Архимандрит Сава Јањић

Link to comment
Подели на овим сајтовима

пре 15 часа, Grizzly Adams рече

Пало ми на памет, ал реко ај да одвалим па да видим шта ће да се деси... ;)

И нисам погрешио! Данке шен за појашњење, нисам знао неке ствари што си написао. :skidamkapu:

Ај још мало, кад већ волиш рекурзију. :) 

Још један разлог зашто се иста користи доста у функционалним језицима је што су и сами типови често рекурзивнo дефинисани. Ево примера функционалне рекурзивне листе са рекурзивном имплементацијом select.

UoZYY6W.jpg

Link to comment
Подели на овим сајтовима

1 hour ago, Juanito рече

Ај још мало, кад већ волиш рекурзију. :) 

Па волим, ал то више дође ко неки алкохолизам... :smeh1:

Имао сам један период кад сам се "одвикавао" од "лоших навика", стварно...

За ову нашу екипу која се утишала мало - без обзира што се ми добро забављамо - рекурзију у решавању практичних проблема треба избегавати. Јер је тај начин размишљања по мало "заразан", кад једном укапираш и одушевиш се онда све оћеш да решаваш рекурзивно... Слично као оно са for петљом - све ми је дозвољено, али није ми све на корист.

ΜΟΛΩΝ ΛΑΒΕ

Link to comment
Подели на овим сајтовима

пре 19 минута, Grizzly Adams рече

Па волим, ал то више дође ко неки алкохолизам... :smeh1:

Имао сам један период кад сам се "одвикавао" од "лоших навика", стварно...

За ову нашу екипу која се утишала мало - бе обзира што се ми добро забављамо - рекурзију у решавању практичних проблема треба избегавати. Јер је тај начин размишљања по мало "заразан", кад једном укапираш и одушевиш се онда све оћеш да решаваш рекурзивно... Слично као оно са for петљом - све ми је дозвољено, али није ми све на корист.

Битно је нагласити да нема ничег фундаментално лошег у рекурзији, а нарочито нема ничег непраткичног. Погрешно је мислити да постоје некакви теоретичари који се тако играју с лепим егзотичним, али непрактичним стварима, а на другој страни су практичари којима је битно да се ”заврши посао”. Рекурзија је и те како практична и људи је користе широм света за имплементацију практичних ствари. Битно је имати језик који је подржава и применити је кад је алгоритам заиста природно рекурзиван.

Тако да Гризлијев савет у суштини важи, али само зато што је тако у пракси, па не желите да имате проблема с менаџерима и осталима у тиму. Осим ако не радите у језику као што је F#, тада ћете имати проблема ако не користите рекурзију. :ani_biggrin:

Али то се све научи у ходу. Кад кренете да учите PHP, о рекурзији вероватно нећете чути док не постанете експерт, а можда ни тад. Ако кренете да учите F#, рекурзија је већ у другој или трећој лекцији. Рекао бих да нема овде реалних основа за бригу.

 

P. S.

Једна огромна банка из Енглеске је запослила неколико људи из моје групе који никада нису написали ниједну петљу, само рекурзије. Плате су им и те како практичне, тричавих дваестак-триес иљада фунти месечно... :)))

Link to comment
Подели на овим сајтовима

×
×
  • Креирај ново...