about summary refs log tree commit diff stats
path: root/cpp/factorial.mu
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/factorial.mu')
-rw-r--r--cpp/factorial.mu33
1 files changed, 33 insertions, 0 deletions
diff --git a/cpp/factorial.mu b/cpp/factorial.mu
new file mode 100644
index 00000000..08d8afee
--- /dev/null
+++ b/cpp/factorial.mu
@@ -0,0 +1,33 @@
+recipe factorial [
+  default-space:address:array:location <- new location:type, 30:literal
+  n:integer <- next-ingredient
+  {
+    # if n=0 return 1
+    zero?:boolean <- equal n:integer, 0:literal
+    break-unless zero?:boolean
+    reply 1:literal
+  }
+  # return n * factorial(n - 1)
+  x:integer <- subtract n:integer, 1:literal
+  subresult:integer <- factorial x:integer
+  result:integer <- multiply subresult:integer, n:integer
+  reply result:integer
+]
+
+recipe main [
+  default-space:address:space <- new location:type, 30:literal
+  x:integer <- factorial 7:literal
+  $print x:integer
+  $print [
+]
+]
+
+scenario factorial-test [
+#?   dump all #? 1
+  run [
+    1:integer <- factorial 5:literal
+  ]
+  memory should contain [
+    1 <- 120
+  ]
+]