# Eine Folge von natürlichen Zahlen



## Bierjunkie (9. Dez 2011)

Aufgabe:



> Eine Folge von natürlichen Zahlen sei definiert als:
> a0 = 0
> ai = 2 ∗ ai−1 + 1
> 
> Geben Sie die ersten 5 Glieder der Folge an!




Erster Versuch:


```
public class folge {
	public static int folge(int n){
		int a = 0;
		int i = 0;
		while(i<n){
			a = 2 * a ( i-1) + 1;
			i = i+1;

		}
      return a;
	}
```

Fragen:

1.Was hat es mit den 5 Gliedern auf sich?
2.Kann man bevor man mit der Aufgabe anfängt zwischen Rekursion und Iteration entscheiden oder nicht?


----------



## Marcinek (10. Dez 2011)

Nein das ist eine rekusion

a0 = 0;

a1 = 2 ∗ 0 + 1 = 1

a2 = 2 * 1 + 1 = 3

a3 = 2 * 3 + 1 = 7

a4 = 2 * 7 +1 = 15

a5 = 2 * 15 + 1 = 31


----------



## Bierjunkie (10. Dez 2011)

So etwa :


```
public class folge {
	public static int folge(int n){
		if(n == 0){
		return 0;
		}else{
			return 2 * (n-1) + 1;
		}
	}
```


----------



## Marcinek (10. Dez 2011)

Führe es aus . Wenn das rauskommt, was ich geschrieben habe dann ist es korrekt

Programmieren ist nicht raten .... aber du bist nah dran  :applaus:


----------



## Bierjunkie (10. Dez 2011)

Hab ein Testprogramm geschrieben mit deinen Berechnungen und bekam das Selbe heraus.



```
package folge;

import java.util.Scanner;

public class folge {
	
	public static int f(int n){
		if (n == 0){
			return 0;
		} else {
				return 2 * n + 1;
			}
		
		}
	
	public static void main(String args[]){
		Scanner scanner = new Scanner(System.in);
		int n,ergebnis;
		System.out.println("1: ");
		n = scanner.nextInt();
		ergebnis = f(n);
		System.out.println("2: " +ergebnis);
		
	}

}
```

Ich frage mich nur wie "ai-1" funktioniert, weil z.B in einem Versuch unten:


```
public static int f(int n){
		if (n == 0){
			return 0;
		} else {
				return 2 * (n-1) + 1;
			}
		
		}
```

Bekam ich komplett andere Werte heraus. Mir ist klar wieso ich die Ergebnisse rausbekam. Doch wie funktioniert genau "ai-1"?


----------



## Marcinek (10. Dez 2011)

```
f(n-1)
```
 - Die Methode ruft sich selber auf.

Also


```
return 2 * f(n-1) + 1;
```

Du warst so nah dran


----------

