45 lines
1.2 KiB
Markdown
45 lines
1.2 KiB
Markdown

|
|
|
|
### 5.1. Simple functions
|
|
To create a recursive function we have to use this structure
|
|
|
|
```Ocaml
|
|
(*normal function*)
|
|
# let f = expr -> 1) evaluate expr ; 2) create & link f to the result
|
|
|
|
(*recursiv function*)
|
|
# let rec f = expr -> 1) create f ; 2) evaluate expr ; 3) link f to the result
|
|
```
|
|
|
|
**Exmple with factorial function**
|
|
```Ocaml
|
|
# let rec fact = function
|
|
| 0 -> 1
|
|
| n -> n * fact(n-1)
|
|
|
|
# fact 4;;
|
|
-: int = 24
|
|
```
|
|

|
|
> ⚠️ CAML have a call stack limite (it will block with stack overflow if the limit is reach)
|
|
|
|
**Basic expression**
|
|
```Ocaml
|
|
let rec f params =
|
|
if stop condition then
|
|
stop expression
|
|
else
|
|
recursive expression
|
|
```
|
|
|
|
To write a recurvise function we need two things
|
|
1) There always is a stop case
|
|
2) The parameters of a recursive call are different then its parent call, and go towards the stop condition
|
|
|
|
### 5.2. Down
|
|
```Ocaml
|
|
# let rec countdown n =
|
|
if n = 0 then
|
|
print_int(0)
|
|
else
|
|
print_int(countdown (n-1));; |