[英]Runtime error in program to create your own power function
好的,所以我正在閱讀程序來創建您自己的冪函數( 編寫一個C程序來計算pow(x,n) )
我讀到它是使用此函數計算功率的第一種方法:
int power(int x, unsigned int y)
{
if( y == 0)
return 1;
else if (y%2 == 0)
return power(x, y/2)*power(x, y/2);
else
return x*power(x, y/2)*power(x, y/2);
}
我有了這個程序的概念,它給出了正確的結果。
現在,這里寫入power(x, y/2)*power(x, y/2)
,所以我們只是在計算power(x,y/2)
的平方。 因此,如果我的power()
函數正確,那么我可以將其更改為power(power(x,y/2),2)
。 也就是說,我們只是在計算power(x,y/2)
的平方。
因此,當我將程序更改為此時:
int power(int x, unsigned int y)
{
if( y == 0)
return 1;
else if (y%2 == 0)
return power(power(x, y/2),2); // Square of power(x,y/2)
else
return x*power(power(x, y/2),2); // x*Square of power(x,y/2)
}
int main()
{
int x = 2;
unsigned int y = 3;
printf("%d\n", power(x, y));
return 0;
}
上面的程序給出了運行時錯誤 。
我無法弄清楚運行時錯誤的原因可能是什么。 誰能幫我嗎?
您從內部調用函數power
,將2作為第二個參數傳遞。
這本質上是無限遞歸,最終導致堆棧溢出 。
如果輸入參數是非負整數,則可以按以下方式實現它:
遞歸地:
unsigned long long power(unsigned long long x,unsigned int y)
{
if (y == 0)
return 1;
return power(x,y/2)*power(x,y-y/2);
}
反復:
unsigned long long power(unsigned long long x,unsigned int y)
{
unsigned long long res = 1;
while (y--)
res *= x;
return res;
}
有效率的:
unsigned long long power(unsigned long long x,unsigned int y)
{
unsigned long long res = 1;
while (y > 0)
{
if (y & 1)
res *= x;
y >>= 1;
x *= x;
}
return res;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.