blob: a4a3f40458f047b95e3b0194ec9afebe98378786 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
---
tags:
- sorbonne
- informatique
semestre: 2
---
Une fonction récursive est une fonction qui s'appelle elle-même, e.g.
```c title=recursive.c
int somme(int n){
if (n == 0) return 0;
return somme(n-1) + n;
}
```
Besoin d'avoir une hypothèse de récurrence quand on fait une récursion
|> besoin d'avoir une convergence, sinon la récursion est infinie
| Indice | = | valeur |
| ---------------- | --- | ---------------------- |
| (1) somme_int(3) | = | 3+somme_int(2) |
| (2) | = | 3+(2+somme_int(1)) |
| (3) | = | 3+(2+(1+somme_int(0))) |
| (4) | = | 3+(2+(1+0)) |
| (5) | = | 6 |
La pile ressemble à la même chose que le tableau
Si l'appel est trop vénère, alors il remplit la mémoire et provoque une erreur
Autre exemple :
```c title=recursive.c
int factoriel(int n){
if (n <= 1) return 1;
return factoriel(n-1) * n;
}
```
La suite de Fibonacci,
$$ F_n=\left\{\begin{matrix}1&\text{si $n=0$ ou $n=1$}\\F_{n-1}+F_{n-2}&\text{sinon}\end{matrix}\right. $$
sert à faire une dichotomie plus rapide en pratique (mais pas en théorie)
```c title=recursive.c
int fibonacci(int n){
if (n <= 1) return 1
return fibonacci(n-1)+fibonacci(n-2)
}
```
|