Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:snr:informatik:python:rekursion [2021/11/17 12:58] – [Rekursion] Olaf Schnürer | lehrkraefte:snr:informatik:python:rekursion [2021/12/03 13:59] (current) – [Link zur Kursseite] Olaf Schnürer | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Rekursion ====== | ||
| + | |||
| + | to be written | ||
| + | * Fakultät rekursiv (schon bei Funktionen) | ||
| + | * divide et impera / divide and conquer / teile und herrsche | ||
| + | |||
| + | [[https:// | ||
| + | Sierpinski rekursiv ist schon gut, eventuell turtle Grafik, Bilder von Wikipedia? | ||
| + | |||
| + | Hanoi? | ||
| + | |||
| + | <WRAP round todo> | ||
| + | [[https:// | ||
| + | <code python> | ||
| + | def cantor(x): | ||
| + | if x == 0: | ||
| + | return " | ||
| + | else: | ||
| + | s = cantor(x - 1) | ||
| + | return s + (3**(x-1)) * " | ||
| + | |||
| + | for i in range(5): | ||
| + | print(cantor(i)) | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <WRAP round todo> | ||
| + | <code python> | ||
| + | from gpanel import * | ||
| + | |||
| + | def zeichne(x, y, l, xr, yr, rekursionstiefe): | ||
| + | if rekursionstiefe == 0: | ||
| + | line(x, y, x + l * xr, y + l * yr) | ||
| + | else: | ||
| + | xl = -yr | ||
| + | yl = xr | ||
| + | | ||
| + | zeichne(x, y, l/3, xr, yr, rekursionstiefe - 1) | ||
| + | zeichne(x + 2*l/3 * xr, y + 2*l/3 * yr, l/3, xr, yr, rekursionstiefe - 1) | ||
| + | zeichne(x + l/3 * xr, y + l/3 * yr, l/3, xl, yl, rekursionstiefe - 1) | ||
| + | zeichne(x + l/3 * (xr + xl), y + l/3 * (yr + yl), l/3, xr, yr, rekursionstiefe - 1) | ||
| + | zeichne(x + l/3 * (2 * xr + xl), y + l/3 * (2 * yr + yl), l/3, -xl, -yl, rekursionstiefe - 1) | ||
| + | | ||
| + | makeGPanel(Size(1000, | ||
| + | window(-10, 1010, -10, 1010) | ||
| + | title(" | ||
| + | |||
| + | zeichne (0,0, 1000, 1, 0, 6) | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | <WRAP round todo> | ||
| + | Das folgende Programm findet alle magischen 3x3-Quadrate durch stupides Ausprobieren. | ||
| + | |||
| + | Die am Ende ausgegebene Zahl ist die Fakultät welcher Zahl? | ||
| + | |||
| + | Wenn man die Variable n auf den Wert 4 endet, braucht das Programm sehr lange - grob überschlagen auf meinem Rechner 3 Jahre! | ||
| + | |||
| + | Wer kann das Programm verbessern? | ||
| + | <code python> | ||
| + | # Erzeuge magisches Quadrat | ||
| + | import time | ||
| + | |||
| + | n = 3 | ||
| + | |||
| + | def magisch(): | ||
| + | for x in range(0,n): | ||
| + | zeilensumme = 0 | ||
| + | spaltensumme = 0 | ||
| + | for y in range(0,n): | ||
| + | spaltensumme = spaltensumme + a[x][y] | ||
| + | zeilensumme = zeilensumme + a[y][x] | ||
| + | if zeilensumme != summe or spaltensumme != summe: | ||
| + | return False | ||
| + | |||
| + | erste_diagonalsumme = 0 | ||
| + | zweite_diagonalsumme = 0 | ||
| + | for x in range(0,n): | ||
| + | erste_diagonalsumme = erste_diagonalsumme + a[x][x] | ||
| + | zweite_diagonalsumme = zweite_diagonalsumme + a[x][n - 1 - x] | ||
| + | if erste_diagonalsumme != summe or zweite_diagonalsumme != summe: | ||
| + | return False | ||
| + | return True | ||
| + | |||
| + | def trage_ein(e): | ||
| + | global anzahl | ||
| + | for x in range(0, n): | ||
| + | for y in range(0, n): | ||
| + | if a[x][y] == 0: | ||
| + | a[x][y] = e | ||
| + | if e > 1: | ||
| + | trage_ein(e - 1) | ||
| + | else: | ||
| + | anzahl = anzahl + 1 | ||
| + | if anzahl % 100000 == 0: | ||
| + | print(anzahl) | ||
| + | print(time.clock() - startzeit) | ||
| + | |||
| + | if magisch(): | ||
| + | print(a) | ||
| + | a[x][y] = 0 | ||
| + | |||
| + | a = [[0 for y in range(0,n)] for x in range(0,n)] | ||
| + | anzahl = 0 | ||
| + | summe = n * (n * n + 1) // 2 | ||
| + | startzeit = time.clock() | ||
| + | trage_ein(n * n) | ||
| + | print(anzahl) | ||
| + | print(time.clock() - startzeit) | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Link zur Kursseite ===== | ||
| + | |||
| + | [[lehrkraefte: | ||