2016-02-23 11 views
5

Calcola l'ennesima potenza di P (entrambi i valori numerici sono interi positivi) utilizzando una funzione ricorsiva myPowerFunction (int p, int n, int & currentCallNumber). currentCallNumber è un parametro di riferimento e memorizza il numero di chiamate di funzione effettuate finora. myPowerFunction restituisce l'ennesima potenza di p.candidata non valida: prevede un valore l per 3o argomento

int myPowerFunction(int p, int n, int &z) 
{ 
    z++; 
    if(n==1)return p; 
    else if(n==0)return 1; 
    else if(n%2==0)return myPowerFunction(p,n/2,z)*myPowerFunction(p,n/2,z); 
    else return myPowerFunction(p,n/2,z)*myPowerFunction(p,n/2,z)*p; 
} 

int main() 
{ 
    cout << myPowerFunction(3,4,1); 
} 
+0

Si prega di formattare questo codice. – erip

risposta

10

È necessario passare una variabile come terzo argomento in programma_principale. Non è possibile passare una costante come riferimento non const.

int count = 0; 
std::cout << myPowerFunction(3, 4, count) << 'n'; 
std::cout << count << '\n'; 
2

terzo parametro si aspetta un lvalue, quindi non è possibile passare costante numerica lì, quindi possibile soluzione può essere:

int z = 1; 
cout<< myPowerFunction(3,4,z); 

o meglio per creare una funzione che chiama ricorsiva uno:

int myPowerFunction(int p, int n) 
{ 
    int z = 1; 
    return myPowerFunction(p,n,z); 
} 
1

In myPowerFunction(3,4,1) il letterale 1 non può essere passato a un riferimento non const in quanto è un valore di prvalore [basic.lval]. È necessario memorizzare il valore in una variabile e quindi utilizzare tale variabile quando si chiama la funzione.

int z = 0; 
std::cout << myPowerFunction(3, 4, z);