From ab2b9a982ede817362072623ff9ae2aa42e083da Mon Sep 17 00:00:00 2001 From: Louis Pilfold Date: Thu, 18 Jan 2024 20:34:43 +0000 Subject: Move recursion lessons together --- .../lesson05_recursion/code.gleam | 17 +++++++++++++++++ .../lesson05_recursion/text.html | 20 ++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 src/content/chapter2_flow_control/lesson05_recursion/code.gleam create mode 100644 src/content/chapter2_flow_control/lesson05_recursion/text.html (limited to 'src/content/chapter2_flow_control/lesson05_recursion') diff --git a/src/content/chapter2_flow_control/lesson05_recursion/code.gleam b/src/content/chapter2_flow_control/lesson05_recursion/code.gleam new file mode 100644 index 0000000..ee93a6f --- /dev/null +++ b/src/content/chapter2_flow_control/lesson05_recursion/code.gleam @@ -0,0 +1,17 @@ +import gleam/io + +pub fn main() { + io.debug(factorial(5)) + io.debug(factorial(7)) +} + +// A recursive functions that calculates factorial +pub fn factorial(x: Int) -> Int { + case x { + // Base case + 1 -> 1 + + // Recursive case + _ -> x * factorial(x - 1) + } +} diff --git a/src/content/chapter2_flow_control/lesson05_recursion/text.html b/src/content/chapter2_flow_control/lesson05_recursion/text.html new file mode 100644 index 0000000..f1585bb --- /dev/null +++ b/src/content/chapter2_flow_control/lesson05_recursion/text.html @@ -0,0 +1,20 @@ +

+ Gleam doesn't have loops, instead iteration is done through recursion, that is + through top-level functions calling themselves with different arguments. +

+

+ A recursive function needs to have at least one base case and at + least one recursive case. A base case returns a value without calling + the function again. A recursive case calls the function again with different + inputs, looping again. +

+

+ The Gleam standard library has functions for various common looping patterns, + some of which will be introduced in later lessons, however for more complex + loops manual recursion is often the clearest way to write it. +

+

+ Recursion can seem daunting or unclear at first if you are more familiar with + languages that have special looping features, but stick with it! With time + it'll become just as familiar and comfortable as any other way of iterating. +

-- cgit v1.2.3