Maison >développement back-end >C++ >Explication détaillée de la récursivité des fonctions C++ : analyse de la complexité de la récursivité

Explication détaillée de la récursivité des fonctions C++ : analyse de la complexité de la récursivité

王林
王林original
2024-05-04 15:54:02511parcourir

La récursion est le processus par lequel une fonction s'appelle elle-même. La complexité temporelle de la récursion peut être analysée en comptant le nombre d'appels récursifs, par exemple, la fonction factorielle est O(n^2), et la fonction récursive du nième terme de la séquence de Fibonacci est O(φ^n), où φ est le nombre d'or.

C++ 函数递归详解:递归的复杂度分析

Explication détaillée de la récursivité des fonctions C++ : analyse de la complexité de la récursion

Qu'est-ce que la récursivité ?

La récursion est le comportement d'une fonction qui s'appelle elle-même. La récursivité se produit lorsqu'une fonction s'appelle elle-même.

Exemple de récursion

Ce qui suit est une fonction récursive qui calcule factoriellement :

int factorial(int n) {
  if (n == 0) {
    return 1;
  }
  return n * factorial(n - 1);
}

Analyse de complexité de la récursion

La complexité d'une fonction récursive peut être analysée en comptant le nombre de ses appels récursifs.

Pour la fonction factorielle :

  • Lorsque n vaut 0, appelez-la de manière récursive une fois.
  • Lorsque n vaut 1, les appels récursifs sont effectués 2 fois (1 appel automatique, 1 appel final).
  • Lorsque n vaut 2, les appels récursifs sont effectués 3 fois (1 auto-appel, 2 appels de queue).

Par analogie, lorsque n vaut k, le nombre d'appels récursifs est k + 1.

Le nombre d'appels récursifs forme une suite arithmétique : 1, 2, 3, ..., k + 1, et sa formule de sommation est :

1 + 2 + 3 + ... + (k + 1) = (k + 1) * (k + 2) / 2

Par conséquent, la complexité de la fonction factorielle est O(n^2) .

Cas pratique

Ce qui suit est une fonction récursive qui calcule le nième terme de la séquence de Fibonacci :

int fibonacci(int n) {
  if (n <= 1) {
    return 1;
  }
  return fibonacci(n - 1) + fibonacci(n - 2);
}

Le nombre d'appels récursifs est lié au nombre d'or, et sa complexité est O(φ^n), où φ ≈ 1,618 C'est le nombre d'or.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn