2010-12-03 18 views
1

Toutes les définitions ont été obtenues jusqu'à présent.Tentative de mise en oeuvre récursive des fonctions de puissance et factorielles. C++

double power(double base, int exponent); 

double factorial(double n); 

Et après cela, je suis complètement perdu et je suis à la recherche d'idées.

+2

Cela n'a jamais été demandé auparavant dans l'histoire de SO ou de Google. : - ~ –

+1

Mais ma suggestion est que vous lisez à nouveau vos notes de cours sur la récursivité. –

+0

Je l'ai fait mais je ne comprenais pas exactement ce qu'il attendait dans les fonctions de puissance et de facteurs. Je comprends la récursivité, mais je vais avoir un jour de congé. Skilldrick l'a éclairci ... Maintenant, je me sens juste stupide lol ... – Zud

Répondre

8

Eh bien, 3^4 est 3 * 3 * 3 * 3. Quel est 3 * 3^3. 3^3 est 3 * 3^2. 3^2 est 3 * 3^1. 3^1 vaut 3.

5! est 5 * 4 * 3 * 2 * 1. Qui est 5 * 4 !. 4! est 4 * 3 !. 3! est 3 * 2 !. 2! est 2 * 1 !. 1! est 1.

Cela devrait vous donner assez à Embarquer avec ...

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


int power(int number, int p){ 
     if(p==1) return number; 
     else return number*power(number, p-1); 
} 
0
double power(double base, int exponent) 
{ 
    if (exponent == 0) 
      return 1; 
    else 
      return base * power(base, exponent - 1); 
} 

double factorial(double n) 
{ 
    if (n == 0) 
      return 1; 
    else 
      return n * factorial(n - 1); 
} 
+0

ou 'if (exponent == 1) retour base;'? – Skilldrick

+0

Oui :) Cela évite une multiplication supplémentaire. Je l'ai manqué. – JohnGray

+0

@Skilldrick alors ça ne marchera pas pour x^0; bien qu'il traitera correctement 0^0 est indéfini. –

0

Essayez de résoudre ce sans utiliser d'abord récursion (si vous en train d'écrire ces fonctions pour le code de production, récursivité nuirait à leur performance de toute façon). Après avoir obtenu ce travail, il devrait être simple de le convertir en un algorithme récursif.

Indice:

N! = N * (N-1)!

N^P = produit de 1 à P de N

0

Tout le monde semble d'autre à assumer exp est positive. Peut-être pourrait modifier pour gérer correctement 0^0 comme NaN plutôt que 1, si c'est important pour votre application.

double int_power(double base, int exp) { 
    if (exp == 0) 
     return 1; 
    if (exp > 0) 
     return base*int_power(base, exp-1); 
    else 
     return int_power(base, exp+1)/base; 
}