Exercise 1.16
authorwatkinsr <ryanwatkins54@gmail.com>
Mon, 29 Jun 2020 00:26:34 +0000 (01:26 +0100)
committerwatkinsr <ryanwatkins54@gmail.com>
Mon, 29 Jun 2020 00:26:34 +0000 (01:26 +0100)
expt.scm [new file with mode: 0644]

diff --git a/expt.scm b/expt.scm
new file mode 100644 (file)
index 0000000..95f84a8
--- /dev/null
+++ b/expt.scm
@@ -0,0 +1,37 @@
+(define (expt b n)
+  (if (= n 0)
+  1
+  (* b (expt b (- n 1)))))
+
+(define (expt2 b n)
+  (expt-iter b n 1))
+
+(define (expt-iter b counter product)
+  (if (= counter 0)
+    product
+    (expt-iter b
+      (- counter 1)
+      (* b product))))
+
+(define (fast-expt b n)
+  (cond ((= n 0) 1)
+        ((even? n) (square (fast-expt b (/ n 2))))
+        (else (* b (fast-expt b (- n 1))))))
+
+(define (fast-expt2 b n)
+  (fast-expt-iter b n 1))
+
+(define (fast-expt-iter b n a)
+  (cond ((= n 1) a)
+        ((even? n) (fast-expt-iter (square b) (/ n 2) a))
+        (else (fast-expt-iter b (- n 1) (* b a)))))
+
+(newline)
+(write (fast-expt 3 3))
+(newline)
+(write (fast-expt 2 4))
+(newline)
+(write (fast-expt 2 5))
+(newline)
+(write (fast-expt 2 6))
+(newline)