• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rekurencja - odwrotność wyrazu

Object Storage Arubacloud
+1 głos
527 wizyt
pytanie zadane 22 stycznia 2021 w Java przez Hubert731 Obywatel (1,650 p.)

Czy można napisać krócej moja metodę z rekurencja która ma za zadanie napisać odwrotnie podany wyraz. Mierzyłem czas z wykonaniem tego zadania pętlą i czasy są bardzo zbliżone a czasem nawet pętla ma krótszy czas, więc nie jestem pewien czy wszystko dobrze rozumiem z tą rekurencją.

Czy mógłby mi też ktoś przy okazji dać jakieś zadania z rekurencją?


	public static void main(String[] args) {
	System.out.println("Podaj jakis wyraz: ");
	String wyraz= new Scanner (System.in).nextLine();
     	System.out.println(odwrotnosc(wyraz,wyraz.length()));
	}

	public static char odwrotnosc(String x, int z) {
		if(z==0)
		return 0;
		else {
			System.out.print(x.charAt(z-1));
			return odwrotnosc(x,z-1);
		}
	}


 

komentarz 22 stycznia 2021 przez tkz Nałogowiec (42,000 p.)
Dlaczego zakładasz, że metoda rekursywna będzie lepsza od iteratywnej?
komentarz 22 stycznia 2021 przez Hubert731 Obywatel (1,650 p.)
często tak jest, więc myślałem że też tak będzie w tym przypadku
komentarz 22 stycznia 2021 przez tkz Nałogowiec (42,000 p.)
Nie wiem jak jest w javie, ale nie skończy Ci się w końcu stos wywołań? Rekursja może wygrywać gdy wchodzi procesor wielordzeniowy, optymalizacje. Jeżli masz procesor, który nie posiada wielu rdzeni, iteracja i rekursja powinny dać podobny efekt. ​​Iteracja jest szybsza niż rekurencja , chociaż w wielu przypadkach, jeśli kod jest dobrze napisany, a kompilator obsługuje "tail call optimization", obie mogą działać równie dobrze.
komentarz 22 stycznia 2021 przez manjaro Nałogowiec (37,390 p.)
a są jeszcze komputery jednordzeniowe?
komentarz 22 stycznia 2021 przez tkz Nałogowiec (42,000 p.)
Czy są? Na pewno są. Czy stanowią większość obecnego rynku? Wątpię.
komentarz 22 stycznia 2021 przez jankustosz1 Nałogowiec (35,880 p.)
Nie znam się na sprzęcie, ale dlaczego wielordzeniowe procesory miałyby wykonywać rekurencję szybciej? W sensie i tak się musi się to wywołać funkcja po funkcji. Nawet gdyby funkcja odpalała siebie samą kilka razy w swoim ciele to i tak nie możnaby tego odpalić asynchronicznie, bo by się wiele algorytmów zepsuło..
komentarz 22 stycznia 2021 przez tkz Nałogowiec (42,000 p.)
Optymalizacyjnie łatwiej jest rozłożyć wywołanie funkcji rekursywnej na wiele rdzeni, niż funkcję iteracyjną.
Wydajność końcowa jest zależna od języka(samego języka jak i wersji, na przykład java od wersji 1.8 wspiera tail call optimization w lambdach), zbioru danych, implementacji. Bez testów wydajnościowych(nie tylko czas, ale i pamięć) nie ma co porównywać mimo wszystko.
1
komentarz 22 stycznia 2021 przez Wiciorny Ekspert (269,590 p.)
wystarczy przeklepać zadanie do edytora czasowego jaki mamy np. na Codility :) - gdzie dla pewnych zadań obliczane są złożoności, żeby w prosty sposób sprawdzić, że rekurencja nie jest tutaj szybsza niż metoda iteracyjna i dla większości przypadków tak też się dzieje, przy założeniu sporych ilości danych
Wolno działać będzie bo zauważ że masz System.out.print(x.charAt(z-1));
nie dość że metody dla system.out wywołujesz rekurencyjnie, to jeszcze metody dla zmiennej x.charAt, także reukurencyjnie.

1 odpowiedź

+1 głos
odpowiedź 22 stycznia 2021 przez Wiciorny Ekspert (269,590 p.)

Też to widzę tak : 
 

public static String odwrocWyraz(String pmStr) {
    return !pmStr.equals("") ? odwrocWyraz(pmStr.substring(1)) + pmStr.charAt(0) : pmStr;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 1,349 wizyt
pytanie zadane 10 czerwca 2018 w C i C++ przez kiki Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 121 wizyt
pytanie zadane 21 października 2018 w Java przez MarcinZielony Użytkownik (710 p.)
0 głosów
1 odpowiedź 446 wizyt
pytanie zadane 19 lipca 2018 w Java przez michaljbjj Początkujący (460 p.)

92,536 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...