aboutsummaryrefslogtreecommitdiff
path: root/src/content/chapter2_flow_control/lesson06_tail_calls/code.gleam
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/chapter2_flow_control/lesson06_tail_calls/code.gleam')
-rw-r--r--src/content/chapter2_flow_control/lesson06_tail_calls/code.gleam21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/content/chapter2_flow_control/lesson06_tail_calls/code.gleam b/src/content/chapter2_flow_control/lesson06_tail_calls/code.gleam
new file mode 100644
index 0000000..d823eec
--- /dev/null
+++ b/src/content/chapter2_flow_control/lesson06_tail_calls/code.gleam
@@ -0,0 +1,21 @@
+import gleam/io
+
+pub fn main() {
+ io.debug(factorial(5))
+ io.debug(factorial(7))
+}
+
+pub fn factorial(x: Int) -> Int {
+ // The public function calls the private tail recursive function
+ factorial_loop(x, 1)
+}
+
+fn factorial_loop(x: Int, accumulator: Int) -> Int {
+ case x {
+ 1 -> accumulator
+
+ // The last thing this function does is call itself
+ // In the previous lesson the last thing it did was multiple two ints
+ _ -> factorial_loop(x - 1, accumulator * x)
+ }
+}