On m'a demandé de calculer l'expression racine imbriquée suivante en utilisant uniquement la récursivité .
J'ai écrit le code ci-dessous qui fonctionne, mais ils nous ont permis d'utiliser une seule fonction et 1 entrée n
à cet effet et non 2 comme je l'ai utilisé. Quelqu'un peut-il m'aider à transformer ce code en une fonction qui calculera l'expression? ne peut utiliser aucune bibliothèque sauf les fonctions de <math.h>
.
sortie pour n = 10: 1.757932
double rec_sqrt_series(int n, int m) {
if (n <= 0)
return 0;
if (m > n)
return 0;
return sqrt(m + rec_sqrt_series(n, m + 1));
}
double helper(int n) {
return rec_sqrt_series(n, 1);
}
Voici une autre approche.
Il repose sur le fait que int
est 32 bits. L'idée est d'utiliser les 32 bits supérieurs d'un int
de 64 bits pour
1) Voir si l'appel était un appel récursif (ou un appel de "l'extérieur")
2) Enregistrer la valeur cible dans les 32 bits supérieurs pendant la récursivité
// Calling convention:
// when calling this function 'n' must be a positive 32 bit integer value
// If 'n' is zero or less than zero the function have undefined behavior
double rec_sqrt_series(uint64_t n)
{
if ((n >> 32) == 0)
{
// Not called by a recursive call
// so start the recursion
return rec_sqrt_series((n << 32) + 1);
}
// Called by a recursive call
uint64_t rn = n & 0xffffffffU;
if (rn == (n >> 32)) return sqrt(rn); // Done - target reached
return sqrt (rn + rec_sqrt_series(n+1)); // Do the recursive call
}