1
0
Эх сурвалжийг харах

Add two more recursive examples

David Peter 2 жил өмнө
parent
commit
d94a3e3a90

+ 26 - 0
examples/binomial_coefficient.nbt

@@ -0,0 +1,26 @@
+# Binomial coefficient using Pascal's rule
+#
+# Adapted from the Python version here:
+# https://en.wikipedia.org/wiki/Binomial_coefficient
+#
+# TODO: This could really benefit from logical and/or operators
+
+fn binomial_coefficient(n: Scalar, k: Scalar) -> Scalar =
+    if k < 0
+        then 0
+        else if k > n
+            then 0
+            else if k > n - k # Take advantage of symmetry
+                then binomial_coefficient(n, n - k)
+                else if k == 0
+                    then 1
+                    else if n <= 1
+                        then 1
+                        else binomial_coefficient(n - 1, k) + binomial_coefficient(n - 1, k - 1)
+
+assert_eq(binomial_coefficient(10, 0), 1)
+assert_eq(binomial_coefficient(10, 1), 10)
+assert_eq(binomial_coefficient(10, 2), 45)
+assert_eq(binomial_coefficient(10, 6), 210)
+assert_eq(binomial_coefficient(10, 9), 10)
+assert_eq(binomial_coefficient(10, 10), 1)

+ 11 - 0
examples/gcd.nbt

@@ -0,0 +1,11 @@
+fn gcd(a: Scalar, b: Scalar) -> Scalar =
+  if b == 0
+    then abs(a)
+    else gcd(b, mod(a, b))
+
+assert_eq(gcd(1071, 462), 21)
+assert_eq(gcd(6, 35), 1)
+
+assert_eq(gcd(-8, 4), 4)
+assert_eq(gcd(-8, -4), 4)
+assert_eq(gcd(8, -4), 4)