Rekursion (3)

Der Computer kreist eine Zahl ein

Im folgenden Programm rät der Computer eine Zahl zwischen 1 und 1000.
Er beginnt bei 512 und halbiert mit jedem Durchlauf das infrage kommende Intervall.


import java.util.*;

public class Zahlenraten {

  static Scanner Eingabe = new Scanner(System.in);
  static int versuche=0;

  static void guess(int tipp, int veränderung) {
    versuche++;
    if (veränderung==0) {
      System.out.println("\nDu mogelst!");
    }
    System.out.println("\nBereich reicht von "+(tipp-veränderung)+" bis "+(tipp+veränderung));
    System.out.print("Ist "+tipp+" zu viel, zu wenig oder ok? v/w/o ");
    String antwort = Eingabe.next();
    if (antwort.equals("o")) {
      System.out.println("\nGeschafft mit "+versuche+" Versuchen.");
    } else {
      if (antwort.equals("v")) {
        guess(tipp-veränderung/2,veränderung/2);
      } else {
        guess(tipp+veränderung/2,veränderung/2);
      }
    }
  }

  public static void main(String[] args) {
    System.out.println("Zahlenraten\n");
    System.out.println("Denk dir eine Zahl zwischen 1 und 1000.");
    System.out.println("Mit maximal zehn Fragen habe ich sie raus.");
    System.out.print("Ok? j/n ");
    String antwort = Eingabe.next();
    if (antwort.equals("j")) {
      guess(512,512);
    } else {
      System.out.println("Na, dann nicht!");
    }
  }
}


Aufgabe:

  1. Heron von Alexandria (ca. 60 n. Chr.) überlieferte eine Verfahren zur Berechnung der Quadratwurzel einer gegebenen Zahl r:
    - Wähle einen anfänglichen Näherungswert n, es darf auch immer die 1 sein.
    - Bilde den Mittelwert aus n und r/n und verwende ihn als nächsten Näherungswert.
    - Brich das Verfahren nach 10 Durchläufen ab.
    - Gib den Näherungswert n aus.

    Programmieren Sie das Verfahren über eine Rekursion.