diff --git a/SICP/exercise_1_11.janet b/SICP/exercise_1_11.janet new file mode 100644 index 0000000..b77bd84 --- /dev/null +++ b/SICP/exercise_1_11.janet @@ -0,0 +1,47 @@ + +(defn f1 [n] + (cond + (< n 3) n + (+ + (f1 (- n 1)) + (* 2 (f1 (- n 2))) + (* 3 (f1 (- n 3)))))) + +(defn f2-s [ a b c ] + (+ a (* 2 b) (* 3 c))) + +(defn f2-iter [ a b c i n ] + (cond + (= i 0) (cond + (= n 0 ) a + (f2-iter a b (f2-s a b c) (+ i 1) (- n 1))) + (= i 1) (cond + (= n 0 ) c + (f2-iter a (f2-s c a b) c (+ i 1) (- n 1))) + (= i 2) (cond + (= n 0 ) b + (f2-iter (f2-s b c a) b c 0 (- n 1))))) + +(defn f2 [n] + (cond + (< n 3 ) n + (f2-iter 2 1 0 0 (- n 2)))) + +(defn f3-iter [a b c n] + (def new_c (f2-s a b c)) + (def new_b (f2-s new_c a b)) + (def new_a (f2-s new_b new_c a)) + (cond + (= n 1) new_c + (= n 2) new_b + (= n 3) new_a + (f3-iter new_a new_b new_c (- n 3)))) + +(defn f3 [n] + (cond + (< n 3) n + (f3-iter 2 1 0 (- n 2)))) + +(print (f3 30)) +(print (f2 30)) +(print (f1 30))