# Rekursion gerade Zahlen addieren



## Kia (5. Feb 2014)

Hallo, ich habe ein problem ich komme einfach nciht drauf wie ich rekursiv gerade zahlen addiere

hier ist mein bisheriger code 
	
	
	
	





```
static int summe_gerade (int n)
		  { 

		
			 if (n <= 0)
			 {
				 return n; // Abbruchbedingung
			 }
			 if(n%2==0)
			 {
			summe_gerade(n - 1); // gerade Zahlen
			 }
			 
		
		}
```
wie genau sollte ich das problem lösen?


----------



## njans (5. Feb 2014)

int n ist eine obere Schranke? 

Dann würde mir spontan einfallen: Wenn n ungerade ist, dann gibst du nur den Wert n-1 zurück. 
Wenn n gerade ist, dann addierst du den wert n und n-2

Wenn n <= 0 gebe 0 zurück.


----------



## Kia (5. Feb 2014)

ungefähr so ?

```
static int summe_gerade (int n)
		{ 

                           if (n <= 0)
			 {
				 return 0; // Abbruchbedingung
			 }
			 if(n%2==0)
			 {
			  return n+summe_gerade(n - 2); // gerade Zahlen
			 }

               }
```


er zeigt bei mir bei static int summe_gerade leider immer noch an This method must return a result of type int.    was mache ich falsch?


----------



## njans (5. Feb 2014)

```
if(n%2==0)
             {
              return n+summe_gerade(n - 2); // gerade Zahlen
             }
```

Joar natürlich, wenn n gerade ist, dann gibst du den aktuellen Wert und alle geraden Werte zuvor aus.
Aber was ist, wenn n nicht gerade ist?


----------



## Kia (5. Feb 2014)

```
if (n <= 0)
			 {
				 return 0; // Abbruchbedingung
			 }
			 if(n%2==0)
			 {
			  return summe_gerade(n-2 ); // gerade Zahlen
			 }
			 else return (n + summe_gerade(n - 1)); // ungerade Zahlen
```



mhhh meinste das so?


----------



## njans (5. Feb 2014)

```
else return (n + summe_gerade(n - 1)); // ungerade Zahlen
```

Lese doch mal, was du da schreibst: Wenn* n ungerade ist *(else), dann *addierst du n und alle geraden Zahlen *zuvor.


----------



## Kia (5. Feb 2014)

jo danke


----------



## JavaMeister (5. Feb 2014)

```
package snippet;

public class Snippet {
	static int summe_gerade (int n)
	{
		if(n % 2 != 0) {
			n--;
		}
		if (n <= 0)
		{
			return 0; // Abbruchbedingung
		}
		return n + summe_gerade(n-2); // gerade Zahlen

	}

	public static void main(String[] args) {
		System.out.println(summe_gerade(11));
	}
}
```


----------



## njans (5. Feb 2014)

Oder als unleserlicher 1-liner:

```
private static int evenSum(int n)
{
  return (n<=0)?0:(n%2==0)?n + evenSum(n-2):evenSum(n-2);
}
```


----------



## JavaMeister (5. Feb 2014)

Leider falsch.


----------



## nvidia (5. Feb 2014)

njans hat gesagt.:


> Oder als unleserlicher 1-liner:
> 
> ```
> private static int evenSum(int n)
> ...



Der auch noch fehlerhaft ist...


----------



## njans (5. Feb 2014)

Stimmt, da ist ein typo drin. Da müsste die eine 2, eine 1 sein.


----------

