使用递归函数myPowerFunction(int p,int n,int& currentCallNumber)计算P的n次幂(p和n都是正整数)。 currentCallNumber是一个引用参数,用于存储到目前为止所进行的函数调用次数。 myPowerFunction返回p。
的n次幂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 :(得分:10)
您需要一个变量作为main_program中的第三个参数传递。您不能将常量作为非const引用传递。
display:table-row
答案 1 :(得分:2)
第三个参数需要一个左值,因此你不能在那里传递数值常量,所以可能的解决方案是:
int z = 1;
cout<< myPowerFunction(3,4,z);
或者更好地创建一个调用递归函数的函数:
int myPowerFunction(int p, int n)
{
int z = 1;
return myPowerFunction(p,n,z);
}
答案 2 :(得分:1)
在String
中,文字myPowerFunction(3,4,1)
无法传递给非1
引用,因为它是prvalue [basic.lval]。您需要将值存储到变量中,然后在调用函数时使用该变量。
const
答案 3 :(得分:0)
您没有没有给出此处的引用作为参数。
但是可以,您对z
的输入来自只读内存,因此无法修改。将z
的输入视为const
,在内部复制z
,并提供副本作为参考。然后您所需的用法就起作用了:
int myPowerFunction(int p, int n, const int &z) // z is now const !
{
int _z = z + 1; // copy !
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()
{
std::cout << myPowerFunction(3, 4, 1);
}