Die Potenz einer reellen Zahl mit einem Exponenten aus den natürlichen Zahlen N0 :={0,1,2,...}
kann man wie folgt definieren: Dieses Vorgehen spart eine Menge Rechenschritte im Vergleich zu dem Vorgehen in Aufgabenteil 1. Schreiben Sie ein Unterprogramm bin_power(x, n), das diesen Algorithmus
benutzt, um xn rekursiv zu berechnen und zurück zu geben. 3. Erklären Sie, warum/wie der Algorithmus aus Aufgabenteil 2 funktioniert.
Sei x ∈ R, n ∈ N0, dann gilt xn = 1 für n = 0, x · xn-1 sonst
1. Schreiben Sie eine rekursive Funktion power(x, n), die die Potenz einer Zahl x mit einer
natürlichen Zahl n im Exponenten zurückgibt, also xn mit Hilfe dieser Definition rekursiv
berechnet.
2. Das Vorgehen in Aufgabenteil 1 ist nicht sonderlich effizient und wir werden nun einen
effizienteren Algorithmus kennenlernen: Hierfür stellen wir den Exponenten n in seiner Binärdarstellung dar:
n = ∑i=0m ai·2i, ai ∈ {0,1}
Ist Ihnen das Binärsystem nicht bekannt, finden Sie hier eine kleine Einführung:
https://de.wikipedia.org/wiki/Dualsystem.
Nun gehen wir die ai dieser Darstellung von am−1 zu kleinen i sukzessive durch und
quadrieren unsere Zahl und multiplizieren mit x (QM) jeweils, wenn wir eine 1 treffen
und quadrieren (Q), wenn wir eine 0 in der Darstellung haben. Ein Beispiel:
23 = 1·24 +0·23 +1·22 +1·21 +1·20 =10111b
=> x23 = QM(QM(QM(Q(x)))) = (((x2)2 · x)2 · x)2 · x
Comment prefix | # |
---|---|
Given input | (2,3), (4,5), (10,3), (6,4), (5,5), (1,2), (10,0) |
Expected output | 8 1024 1000 1296 3125 1 1 8 1024 1000 1296 3125 1 1 |