2016-02-23 21 views
5

Tính lũy thừa n của P (cả p và n là số nguyên dương) bằng hàm đệ quy myPowerFunction (int p, int n, int & currentCallNumber). currentCallNumber là tham số tham chiếu và lưu trữ số lượng các cuộc gọi hàm được thực hiện cho đến thời điểm này. myPowerFunction trả về lũy thừa thứ n của p.chức năng ứng cử viên không khả thi: dự kiến ​​giá trị l cho đối số thứ 3

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

Vui lòng định dạng mã này. – erip

Trả lời

10

Bạn cần một biến để chuyển làm đối số thứ ba trong main_program. Bạn không thể chuyển một hằng số dưới dạng tham chiếu không phải const.

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

tham số thứ ba hy vọng một giá trị trái, vì vậy bạn không thể vượt qua hằng số đó, vì vậy giải pháp khả thi có thể là:

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

hoặc tốt hơn để tạo ra một chức năng mà các cuộc gọi đệ quy một:

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

Trong myPowerFunction(3,4,1) các chữ số 1 không thể được chuyển đến tham chiếu không const vì nó là giá trị chính xác [basic.lval]. Bạn cần lưu trữ giá trị vào một biến và sau đó sử dụng biến đó khi gọi hàm.

int z = 0; 
std::cout << myPowerFunction(3, 4, z); 
Các vấn đề liên quan