English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans cet article, vous apprendrez à créer des fonctions récursives. Une fonction se appelant elle-même.
s'appelant elle-mêmeFonctionAppelée une fonction récursive. Et cette technique s'appelle la récursion. Lorsque vous créez une fonction récursive, vous devez créer des conditions pour éviter que la fonction ne s'appelle pas elle-même indéfiniment.
func recurse() { //instructions recurse() } recurse()
La figure suivante montre la manière de faire des appels récursifs.
Dans le diagramme de flux ci-dessus, la récursion est exécutée de manière infinie. Dans certains cas, vous pouvez créer une récursion qui continuera jusqu'à ce que certaines conditions soient remplies.
Pour éviter la récursion infinie, utilisez l'appel récursif dans les instructions conditionnelles Swift, par exempleinstruction if ... else。
func countDownToZero(num: Int) { print(num) if num > 0 { countDownToZero(num: num - 1) } } print("Compte à rebours:") countDownToZero(num:3)
当您运行以下程序时,输出将是:
Compte à rebours: 3 2 1 0
Dans le programme ci-dessus, l'instruction print("Compte à rebours:") affiche dans la consoleCompte à rebours:。Cette instruction appelle une fonction countDownToZero avec un paramètre de type Integer countDownToZero(num:3) 。
countDownToZero() exécute les instructions à l'intérieur de la fonction, si la condition num > 0 est remplie, countDownToZero() appelle à nouveau la fonction countDownToZero(num: num - 1)。
Si la condition n'est pas remplie, ne pas appeler la fonction et arrêter la récursion.
步骤 | appeler une fonction | imprimer | num > 0 ? |
---|---|---|---|
1 | countDownToZero(3) | 3 | 是 |
2 | countDownToZero(2) | 2 | 是 |
3 | countDownToZero(1) | 1 | 是 |
4 | countDownToZero(0) | 0 | 否 (结束) |
func factorial(of num: Int) -> Int { if num == 1 { 返回 1 } return num * factorial(of:num - 1) } } let x = 4 let result = factorial(of: x) print("The factorial of \(x) is \(result)")
当您运行以下程序时,输出将是:
The factorial of 4 是 24
步骤 | 传递的参数 | 返回语句 | 值 |
---|---|---|---|
1 | 4 | 返回 4 * factorial(of:3) | 4 * factorial(of:3) |
2 | 3 | 返回 3 * factorial(of:2) | 4 *3 * factorial(of:2) |
3 | 2 | 返回 2 * factorial(of:1) | 4 * 3 *2 * factorial(of:1) |
4 | 1 | 返回 1 | 4 * 3 * 2 * 1 |
当可以在大约两个步骤中找到问题的解决方案时,通常将递归用作迭代的替换。