Register for your free account! | Forgot your password?

You last visited: Today at 14:09

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Rekursion

Discussion on Rekursion within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1


 
elite*gold: 365
Join Date: Jan 2012
Posts: 1,232
Received Thanks: 215
Rekursion

Hallo,

ich hätte eine Frage zur Rekursion, angenommen diese Funktion ist gegeben:
Code:
public static int gcd(int p, int q){
		 while (q!=0) {
			 int old_q = q;
			 q = p % q;
			 p = old_q; 
		 }      
		 return p;  }
Diese soll Rekursive dargestellt werden. Mein Ansatz wäre:

Code:
 public static int gcdre(int p, int q){
		if(q==0){
			return p; }
		return gcdre(p, q%p); }
und wenn man auf ein if/while/for verzichten möchte:

Code:
 public static int gcd(int p, int q){
			return (q==0) ? p : gcd(p, q%p); }
Bei kleinen Zahlen bringt mir mein Ansatz ein richtiges Ergebnis, aber bei größeren Zahlen ein java.lang.StackOverflowError. Wie könnte man dies besser lösen?

(Entschuldigt bitte diese banale Frage, ich bin noch Anfänger und dies ist ein Klausur relevantes Thema für mich.
FunkyJustice is offline  
Old 03/31/2017, 03:31   #2
 
Mikesch01's Avatar
 
elite*gold: 203
Join Date: Sep 2007
Posts: 732
Received Thanks: 190
Müsste der Rekursionscode nicht so lauten?
Code:
public static int gcdre(int p, int q){
		if(q==0){
			return p; }
		return gcdre(q, p%q); 
}
Man beachte die Parameter beim return in Zeile 4
Mikesch01 is offline  
Thanks
1 User
Old 03/31/2017, 11:28   #3
 
elite*gold: 100
Join Date: Apr 2008
Posts: 860
Received Thanks: 1,487
Quote:
Originally Posted by Mikesch01 View Post
Müsste der Rekursionscode nicht so lauten?
Richtig. Sieht man ja auch an der Schleife

Code:
public static int gcd(int p, int q){
		 while (q!=0) {
			 int old_q = q;
			 q = p % q;
			 p = old_q; 
		 }      
		 return p;  }
Das q wird zum neuen p.

(Ein Fehler den ich in den Übungen sehr oft sehe )
florian0 is offline  
Thanks
1 User
Old 04/22/2017, 01:55   #4


 
​Exo's Avatar
 
elite*gold: 28
Join Date: Aug 2014
Posts: 4,096
Received Thanks: 2,653
Just don't use Java xD

Afair Java doesn't support tail recursion optimization (more time and larger stack). So for larger numbers you should use an algorithm as Lehmer's algorithm (very efficient).
​Exo is offline  
Reply


Similar Threads Similar Threads
Ich verstehe keine Rekursion
02/16/2015 - AutoIt - 10 Replies
Hi hab ein bisschen Angst das zu fragen weil ich die ganzen Threads gesehen hab in denen noobs wie ich geflamet wurden wegen Fragen zu Rekursion^^ ok ich glaub ich poste das Script mit der Frage was mache ich falsch? #include <GUIConstantsEx.au3> GUICreate("Air", 500, 100)
Java Rekursion Primzahlen
12/01/2014 - Java - 6 Replies
Hey könntest ihr mir helfen, wie ich rekursiv eine Primzahl bestimme? // Implementieren Sie hier die Methode istPrim(n) public static boolean ( int n) { if (a%a-1==0) return false; else return true; könntet ihr mir helfen? Ich versuche gerade Java zu lernen..



All times are GMT +1. The time now is 14:10.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.