ale po co tak?
Kod:
int f(int x) {
return k(x,x);
}
int k(int x, int y) {
//masz swoje x
return k(x,y-1);
}
Wersja do druku
dzieki wszystkim za pomoc, i sory że Wam takimi głupotami zawracam głowe, ale nie mam sie do kogo innego zwrocic, ale zawsze staram sie szukac sam odpowiedzi u wujka google, dopiero w ostatecznosci jak trwoga to do torg'a :)
My zawsze chetnie udzielamy pomocy :)
@sm0ku16 ; jak chcesz pojąć rekurencję to naucz się prologa i trzaskaj programy z 99 prolog problems. język chyba wymarły i używany aktualnie jedynie do zwiększania budżetu uczelni, ale chociaż rekurencji potrafi nauczyć ;p
A ja do nauki rekurencji polece zrobienie 2 funkcji rekurencyjnych ktore dzialaja i robia to czego sie od nich oczekuje, w jakimkolwiek jezyku.
Nie straszcie go ze aby pojac tak prosta rzecz, powinien sie wziac za prologa...
Nie no, rekurencja jest na tyle trywialna, że uczenie się jakiegokolwiek języka, po to żeby coś w niej napisać mija się z celem.
@sm0ku16 ;
Masz wyzwanie: napisz sortowanie przez scalanie. W dowolnym języku (może być nawet Haskell lub prolog). Pobawisz się rekurencją i nauczysz się czegoś przydatnego ;d
Szybkie pytanie:
Jest strona z paginacją, 20 wyników na stronę, jesteś na trzeciej stronie (a jest ich miljard) i zmieniasz ustawienia paginacji żeby na stronie było po 100 wyników. Co powinno być wyświetlone na stronie, żeby było najwygodniej według was?
w ogóle poza kilkoma algorytmami rekurencja jest gdzieś szeroko używana? wszystkie zastosowania jakie mi przychodzą do głowy można spokojnie zastąpić pętlami.
mówię o językach typu java, c++, python, a nie typowo funkcyjnych jak właśnie prolog czy (chyba) haskell.
chodzi mi o to, czy rekurencja jest stosowana w "profesjonalnych" programach pisanych właśnie w javie czy c++ lub podobnych językach. na przykład czy zdarzyło wam się kiedyś w pracy jej użyć? bo wg mnie dużo łatwiej, a na pewno czytelniej jest użyć pętli (chyba zawsze się da?)
Tak nie raz juz musialem uzyc rekurencji.
Teraz mojego konkretnego przykladu nie pamietam, ale dam na szybko przyklad z wordpressa.
System shortcodów.
Mozesz zarejestrowac shortcode [galeria] - jak ktos go wpisze wpisze w tresci posta, to pojawi sie zamiast niego galeria, to samo co bbcode.
Dalej - mozesz zarejestrowac
Kazdy z tych kodow to inny shortcode, ale jesli chcesz aby w galerii, w srodku wpisane shortcody byly tez zamieniane na odpowiednie elementy, to trzeba znowu wywolac funkcje konwertujaca [video] na odpowiedni kod html.Kod:[galeria]
[video id="5"]
[image id="33"]
[post id="251"]
[/galeria]
To jest wlasnie rekurencja. Wewnatrz konwersji stringa, natykasz na string ktory rowniez musi byc skonwertowany, ktory rowniez zawiera string ktory musi byc skonwertowany.
Raz nawet popelnilem gwalt na kompilacji PHP.
Zrobiłem plik tree-leaf.php ktory w kodzie mial
include('tree-leaf.php');
Zapewne bylo to zajebiscie nieefektywne, bo include nie jest kompilowane - za kazdym razem parsowany jest plik od nowa. Gdyby plik byl duzy bo bylaby niezla klapa, ale w tym przypadku byl maly, i zagniezdzony maksymalnie 5x, wiec zostawilem jak jest, bo i tak roznica nie zauwazalna.
Czy latwiej/czytelniej? Wszystko zalezy od problemu. Kazda funkcje rekurencyjna da sie zapisac jako iteracyjna, i odwrotnie. Roznica jest jednak ogromna, na studiach nam wykladowca pokazywal funkcje rekurencyjna ktora zajmowala 15 linijek, a jej odpowiednik iteracyjny wymagal okolo 350linii kodu, zeby zrobic to samo.
A czytelniej - na pewno rekurencyjna jest bardziej czytelna :D
Sortowanie quicksort/heapsort nie ma sensu bez rekurencji. Cale jego sedno opiera sie na podzieleniu problemu na mniejszy, i zrobienia tego samego.
<facepalm>
Erlang to niby nie jest "profesjonalny" język?
Tak, użyłem multum razy, chociażby po to, aby parsować rekurencyjnie rzeczy, pchanie tego w pętlę zupełnie nie ma sensu.
Rekurencja > Pętle :p
@edit
I oczywiście rekurencje są dużo bardziej czytelne niż pętle, nie wiem kto Ci kurwa powiedział, że jest odwrotnie xD
@Alex Fortune ;
http://ideone.com/wXiAn9
powiedz mi, ze to jest czytelne :)
albo chociaz tyle, ze bardziej czytelne od tego:
http://ideone.com/Qw8FDZ
nie chodzi mi to jak kod wygląda, ale o interpretacje kodu
niektóre problemy są czytelniejsze w postaci rekurencyjnej, inne w iteracyjnej
trzeba wybrać odpowiednie rozwiązanie (rekurencja ma wyższą złożoność pamięciową nie?)
nie napisałem, że erlang jest nieprofesjonalny, ale ponieważ jest językiem funkcyjnym, to rekurencja zapewne występuje w nim na porządku dziennym. chodziło mi o to, czy w językach z zupełnie innej rodziny, np. c++, java używa się powszechnie (albo przynajmniej dość często) rekurencji.
dzięki za wszystkie odpowiedzi ;P
Czy książka
Język C. Szkoła programowania - Wydanie V - Stephen Prata
Jest dobra dla totalnego laika z programowania?
Rozwiązania niektórych problemów bez użycia rekurencji bywają trudne. Lecz w językach imperatywnych warto unikać jej stosowania - w językach funkcyjnych są one wydajne, ponieważ kompilator/interpreter pod spodem często jest w stanie zamienić je na pętle (tzw. TCO - tail call optimalisation). Dla komputera jako takiego pętla jest naturalniejszą konstrukcją sterowania niż rekurencja, która na mikropoziomie jest dosyć droga (alokacja wywołania na stosie itd.).
Co do problemu czytelności, jest to bardzo względne. Ja często z przyjemnością czytam rekurencje, które układają się w przebieg indukcji strukturalnej względem struktury danych - z łatwością wtedy potrafię to sobie przeparsować w głowie, o wiele łatwiej niż pętle w takiej sytuacji ;).
Przykład:
PozdrawiamKod:(Haskell)
search needle treeNode@(TreeNode left value right) | value > needle = search needle right
| value < needle = search needle left
| otherwise = treeNode
Killavus
Ale tutaj jest złe porównanie trochę. Na siłę zrobiona rekurencja, do problemu który rekurencyjny nie jest. Tutaj dodawane są kolejne elementy. A rekurencja jest przydatna, wtedy gdy wynik zależny jest od wyniku poprzedniego wywołania.
Chodzi o wszelkie zagnieżdzenia, np tablic.
Chcesz wyswietlic WSZYSTKIE wartosci tablicy. Coś co w php robi się za pomocą var_dump albo print_r.
http://ideone.com/XFpK9UKod PHP:<?php function pokaz_zawartosc($tablica) { foreach ($tablica as $pole) { if (is_array($pole)) { pokaz_zawartosc($pole); } else { echo $pole."\n"; } } } ?>
Tutaj az sie prosi o rekurencje. Cholernie krotki kod. Ktory pokaze kazde zagniezdzenie. Naturalna jest tutaj rekurencja, nawet nie przychodzi mi pomysl jak to zrobic iteracyjnie :P
Czytając kod javy z blogów itd. zauważyłem, że ludzie mając oznaczone pola jako private odwołują się do nich po prostu "field" zamiast "this.field".
Np:
Seter musi wyglądać tak, jeżeli parametr ma taką samą nazwę:Kod PHP:public class ItemEntity { private String url; public String getUrl() { return url; } } Nawet IDEA tak genereuje gettery.
Czego lepiej używać? Jak odwoływać się do pól prywatnych? W PHP to było jasne i klarowne :DKod PHP:public class ItemEntity { private String url; public ItemEntity(String url) { this.url = url; } }
@Rollercoster ;
nie rozumiem Twojego problemu bo wydaje mi się, że pytasz o strasznie głupią rzecz :D
nie ma znaczenia, że się odwołujesz do zmiennej prywatnej this.field czy field.
This jest potrzebne tylko wtedy, kiedy jak w seterze napisanym przez Ciebie, podajesz argument z taką samą nazwą jak Twoje pole, dlatego pisząc this.field pokazujesz na swoje pole w klasie a nie argument, któy podajesz
Siema, też mam głupie pytanie ale no nic, może mi jakoś pomożecie. Miałem do zrobienia program który tworzy kolejno 4 pliki, z 10 mln, 15 mln, 20 mln i 25 mln losowych liczb a następnie policzyć jak długo tworzył te pliki, jak długo policzy ile jest tam liczb parzystych oraz jak duże te pliki są. Wszystko spoko tylko że dane które otrzymuję są trochę dziwne. Kiedy wielkości plików oraz czasy ich tworzenia wzrastają wraz z ilością liczb to to policzenie parzystych totalnie nie jest adekwatne do ilości tych liczb. Czy takie dane mogą wychodzić czy gdzieś się jebnąłem pisząc kod?
powinno rosnąć liniowo, w innym przypadku obstawiam błąd w kodzie.
w skrajnym przypadku możliwe jest, że masz pofragmentowany dysk i większy plik rozrzuca ci po różnych obszarach fizycznych i dlatego odczyt trwa dłużej ;d ale nawet jeśli tak jest, to różnice powinny być ledwo zauważalne.
jakie mniej więcej to są wyniki? ile razy dłużej szuka w 15, 20 i 25 milionowym pliku względem tego najmniejszego?
no i kod też mógłbyś podrzucić ;p
Tutaj te dane:
http://pastebin.com/U6vZpP5w
tutaj kod:
http://pastebin.com/dxGuCSR5
aaa dobra już mam, niepotrzebnie dałem żeby ta metoda zwracała mi ilość tych liczb parzystych i na to się chyba tracił ten czas.
czemu w javie nie da się rzutować enuma na inta...
Jest .ordinal() ( ͡° ͜ʖ ͡°)
Jako zwolennik ksiazek, polecalbym Ci jednak ta pozycje:
http://helion.pl/ksiazki/programowan...rup,pcpptp.htm
Wystarczy poczytac recenzje :)
podjalem wyzwanie ale poległem, pol godziny ponad myslalem jak to ugryzc i nie dam rady, wybacz, ja jestem bardzo poczatkujacy w temacie, jak narazie jedyne sortowanie z jakim jestem zaznajomiony to bombelkowe, ale zapisalem sobie zeby kiedys jak bede madrzejszy napisac ta funkcje :)
http://edu.i-lo.tarnow.pl/inf/alg/00...ges/013_03.gif
masz tutaj schemat blokowy, po prostu go zaimplementuj
jakbys miał z czymś problem to tutaj masz rozwiazanie: http://edu.i-lo.tarnow.pl/inf/alg/003_sort/0013.php
o maj gad, 1 lo tarnów - strona, która mi zaoszczędziła masę czasu na pisaniu algorytmów ;d polecam, bardzo dobry content
@
czemu w javie jak robię ~10 wątków, w których każdy wykonuje nieskończoną pętlę (przesuwa postać na mapie) to moje 8 rdzeni nie wie co się dzieje po 30 sekundach? ;o
to aż takie obciążenie? generalnie potrzebuję, żeby to się aktualizowało raz na ~pół sekundy, to mam tak:
da się może ten wątek po prostu uśpić na pół sekundy?Kod:while(true)
{
if(System.currentTimeMilis() - timer > 500){
robWszystko();
timer = system.currentTimeMilis();
}
}
sleep(500)?
8 rdzeni? Masakra, ja dalej siedze na jednym 32 bitowym.
Przypomnialo mi sie jak pewien stary programista powiedzial, mi ze za czasow Pentium I 133 ludzie nie potrafili wykorzystac 100% jego mozliwosci.
2015
10 watkow gunwojavy
Procek dalej nie wykorzystany w 100%
Taki procesor 8x3ghz ile jest w stanie wykonac operacji na sekunde?
Btw. Tarnowskie lo tez mi sporo czasu zaoszczedzilo ;-)
Nie wydaje mi się. Przy pomocy rekurencji można symulować działanie pętli, ale przy pomocy pętli nie można zasymulować niektórych zastosowań rekurencji — wykładowca pokazywał nam na wykładzie przykład przeszukiwania z nawrotami dla dowolnej liczby zmiennych, którego nie da rady zrobić samymi pętlami, a pętlami (które można zamienić na rekurencję) + rekurencją już tak.
Rekurencja raczej nie przebije czytelności zwykłej pętli foreach.Cytuj:
A czytelniej - na pewno rekurencyjna jest bardziej czytelna :D
Potwierdzam.Cytuj:
Rekurencja > Pętle :p
Jak dla mnie, #1 znacznie bardziej czytelne niż #2.
Witam, mam pytanie tutaj do doświadczonych osób. Jak zacząć się uczyć, żeby zostać frontend developerem. Chodzi mi o to, że przerabiam kursy itd. no ale wiadomo to są podstawy. Jak się tego nauczyć ściągać z internetu szablony stron i je przerabiać ? Czy bardziej pisać coś od nowa i wzorować się na czymś. Domyślam się, że długa droga przede mną, ale czy są jakieś szanse, żebym tak za około 9 miesięcy, poświęcając 2-3h dziennie złapał się na junior web frontenda ? Domyślam się, że muszę porządnie ogarnąć html5+css3+js. Proszę o pomoc i poprowadzenie mnie jak mam z tym zacząć
Pozdrawiam.
Na frontend juniora, to może nawet sie zlapiesz za 2 miechy jak bedziesz sie staral.
Szukaj plikow psd layoutow, i sprobuj je zakodowac. Jak zakodujesz 3 stronki, zglos sie do kilku agencji, ze zaczynasz, i zrobisz cos za pol ceny. Zrobisz - beda zadowoleni, bedziesz mial wiecej zlecen. Wkoncu po 4-10 zleceniach przez neta, bediesz na tyle doswiadczony ze szukaj roboty stacjonarnie. Powodzenia :) Frontend jest zbyt latwy zeby sie go uczyc 9 miesiecy :D