Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
cours
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
jeremy.meissner
cours
Commits
dd10c2a3
Verified
Commit
dd10c2a3
authored
3 years ago
by
orestis.malaspin
Browse files
Options
Downloads
Patches
Plain Diff
added cours 6 slides. not finished
parent
62d816d7
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
slides/cours_5.md
+0
-110
0 additions, 110 deletions
slides/cours_5.md
slides/cours_6.md
+196
-0
196 additions, 0 deletions
slides/cours_6.md
with
196 additions
and
110 deletions
slides/cours_5.md
+
0
−
110
View file @
dd10c2a3
...
...
@@ -769,7 +769,6 @@ void recurse(int n) {
printf("\n");
}
}
recurse(13);
```
...
...
@@ -784,113 +783,4 @@ binaire(13): n = 13, n % 2 = 1, n / 2 = 6,
// affiche: 1 1 0 1
```
# Exercice: réusinage et récursivité (1/4)
## Réusiner le code du PGCD avec une fonction récursive
## Étudier l'exécution
```
C
42 = 27 * 1 + 15
27 = 15 * 1 + 12
15 = 12 * 1 + 3
12 = 3 * 4 + 0
```
# Exercice: réusinage et récursivité (2/4)
## Réusiner le code du PGCD avec une fonction récursive
## Étudier l'exécution
```
C
42 = 27 * 1 + 15 | PGCD(42, 27)
27 = 15 * 1 + 12 | PGCD(27, 15)
15 = 12 * 1 + 3 | PGCD(15, 12)
12 = 3 * 4 + 0 | PGCD(12, 3)
```
# Exercice: réusinage et récursivité (3/4)
## Réusiner le code du PGCD avec une fonction récursive
## Étudier l'exécution
```
C
42 = 27 * 1 + 15 | PGCD(42, 27)
27 = 15 * 1 + 12 | PGCD(27, 15)
15 = 12 * 1 + 3 | PGCD(15, 12)
12 = 3 * 4 + 0 | PGCD(12, 3)
```
## Effectuer l'empilage - dépilage
. . .
```
C
PGCD(12, 3) | 3
PGCD(15, 12) | 3
PGCD(27, 15) | 3
PGCD(42, 27) | 3
```
# Exercice: réusinage et récursivité (4/4)
## Écrire le code
. . .
```
C
int pgcd(int n, int m) {
if (n % m > 0) {
return pgcd(m, n % m);
} else {
return m;
}
}
```
# La suite de Fibonacci
## Règle
$$
\m
athrm{Fib}(n) =
\m
athrm{Fib}(n-1) +
\m
athrm{Fib}(n-2),
\q
uad
\m
athrm{Fib}(0)=0,
\q
uad
\m
athrm{Fib}(1)=1.
$$
## Exercice: écrire la fonction $\mathrm{Fib}$ en récursif et impératif
```
C
int fib(int n) {
if (n > 1) {
return fib(n - 1) + fib(n - 2);
} else {
return n;
}
}
```
```
C
int fib_imp(int n) {
int fib0 = 1;
int fib1 = 1;
int fib = n == 0 ? 0 : fib1;
for (int i = 2; i < n; ++i) {
fib = fib0 + fib1;
fib0 = fib1;
fib1 = fib;
}
return fib;
}
```
# Exercices pour les semaines sans cours
## Quelques algorithmes à réaliser et poster sur matrix
1.
Algorithme du PPCM.
2.
La puissance indienne.
3.
La suite de Fibonacci.
This diff is collapsed.
Click to expand it.
slides/cours_6.md
0 → 100644
+
196
−
0
View file @
dd10c2a3
---
title: "Récursivité"
date: "2021-11-03"
patat:
eval:
tai:
command: fish
fragment: false
replace: true
ccc:
command: fish
fragment: false
replace: true
images:
backend: auto
...
# La récursivité (1/2)
*
Code récursif
```C
int factorial(int n) {
if (n > 1) { // Condition de récursivité
return n * factorial(n - 1);
} else { // Condition d'arrêt
return 1;
}
}
```
. . .
* Code impératif
```C
int factorial(int n) {
int f = 1;
for (int i = 1; i < n; ++i) {
f *= i;
}
return f;
}
```
# Exercice: réusinage et récursivité (1/4)
## Réusiner le code du PGCD avec une fonction récursive
## Étudier l'exécution
```
C
42 = 27
*
1 + 15
27 = 15
*
1 + 12
15 = 12
*
1 + 3
12 = 3
*
4 + 0
```
# Exercice: réusinage et récursivité (2/4)
## Réusiner le code du PGCD avec une fonction récursive
## Étudier l'exécution
```
C
42 = 27
*
1 + 15 | PGCD(42, 27)
27 = 15
*
1 + 12 | PGCD(27, 15)
15 = 12
*
1 + 3 | PGCD(15, 12)
12 = 3
*
4 + 0 | PGCD(12, 3)
```
# Exercice: réusinage et récursivité (3/4)
## Réusiner le code du PGCD avec une fonction récursive
## Étudier l'exécution
```
C
42 = 27
*
1 + 15 | PGCD(42, 27)
27 = 15
*
1 + 12 | PGCD(27, 15)
15 = 12
*
1 + 3 | PGCD(15, 12)
12 = 3
*
4 + 0 | PGCD(12, 3)
```
## Effectuer l'empilage - dépilage
. . .
```
C
PGCD(12, 3) | 3
PGCD(15, 12) | 3
PGCD(27, 15) | 3
PGCD(42, 27) | 3
```
# Exercice: réusinage et récursivité (4/4)
## Écrire le code
. . .
```
C
int pgcd(int n, int m) {
if (n % m > 0) {
return pgcd(m, n % m);
} else {
return m;
}
}
```
# La suite de Fibonacci (1/2)
## Règle
$$
\mathrm{Fib}(n) = \mathrm{Fib}(n-1) + \mathrm{Fib}(n-2),\quad
\mathrm{Fib}(0)=0,\quad \mathrm{Fib}(1)=1.
$$
## Exercice: écrire la fonction $\mathrm{Fib}$ en récursif et impératif
. . .
## En récursif (6 lignes)
```
C
int fib(int n) {
if (n > 1) {
return fib(n - 1) + fib(n - 2);
}
return n;
}
```
# La suite de Fibonacci (2/2)
## Et en impératif (11 lignes)
```
C
int fib_imp(int n) {
int fib0 = 1;
int fib1 = 1;
int fib = n == 0 ? 0 : fib1;
for (int i = 2; i < n; ++i) {
fib = fib0 + fib1;
fib0 = fib1;
fib1 = fib;
}
return fib;
}
```
# Exponentiation rapide ou indienne (1/N)
## But: Calculer $x^n$
* Algorithme naîf et impératif
```
C
int pow(x, n) {
if (0 == n) {
return 1;
}
for (int i = 1; i < n; ++i) {
x
*
= x;
}
return x;
}
```
. . .
* Complexité? Combien de multiplication en fonction de `n`?
# Exponentiation rapide ou indienne (1/N)
* Algorithme naïf et récursif
```
C
int pow(x, n) {
if (n != 0) {
return x
*
pow(x, n-1);
} else {
return 1;
}
}
```
# Exercices pour les semaines sans cours
## Quelques algorithmes à réaliser et poster sur matrix
1. Algorithme du PPCM.
2. La puissance indienne.
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment