[問題] leetcode POW(n,x) stack overflow
平台: Leetcode in C
Implement pow(x, n), which calculates x raised to the power n (i.e. xn).
在case myPow(0.00001,2147483647) 出現stack overflow的情況,
其實第二個參數不到INT_MAX就會overflow了。 請問是不是遞迴太深的緣故,要怎麼保證不會overflow?
謝謝
double myPow(double x, int n){
double output;
if(n>0)
{
if(n == 1 )
return x;
else
{
output = x*myPow(x,n-1);
}
}
else if(n == 0 )
return 1;
else
{
if(n == -1)
return 1/x;
else
output = (1/x)*myPow(x,n+1);
}
return output;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.230.161.136 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1601434122.A.85E.html
※ 編輯: anoymouse (61.230.161.136 臺灣), 09/30/2020 10:51:23
推
09/30 12:19,
3年前
, 1F
09/30 12:19, 1F
正在看 還在消化中 也許可以避免stack overflow。
→
09/30 16:36,
3年前
, 2F
09/30 16:36, 2F
推
09/30 19:25,
3年前
, 3F
09/30 19:25, 3F
→
09/30 19:26,
3年前
, 4F
09/30 19:26, 4F
→
09/30 19:26,
3年前
, 5F
09/30 19:26, 5F
→
09/30 19:26,
3年前
, 6F
09/30 19:26, 6F
→
09/30 19:26,
3年前
, 7F
09/30 19:26, 7F
→
09/30 19:26,
3年前
, 8F
09/30 19:26, 8F
→
09/30 19:26,
3年前
, 9F
09/30 19:26, 9F
→
09/30 19:26,
3年前
, 10F
09/30 19:26, 10F
→
09/30 19:26,
3年前
, 11F
09/30 19:26, 11F
→
09/30 19:26,
3年前
, 12F
09/30 19:26, 12F
→
09/30 19:26,
3年前
, 13F
09/30 19:26, 13F
→
09/30 19:26,
3年前
, 14F
09/30 19:26, 14F
→
09/30 19:26,
3年前
, 15F
09/30 19:26, 15F
→
09/30 19:26,
3年前
, 16F
09/30 19:26, 16F
我這邊純粹在指stack overflow,會提到INT_MAX只是因為leetcode把第二個參數設成
INT_MAX,當然如果最終回傳直>INT_MAX可能也有問題,但目前主要是想先處理
stack overflow。
推
09/30 19:51,
3年前
, 17F
09/30 19:51, 17F
→
09/30 22:58,
3年前
, 18F
09/30 22:58, 18F
是沒有一定要用遞迴 我一開始也是想用迴圈,但是我想看看別人是怎麼做的
發現該題的討論區通通都是用遞迴,就想說試試看遞迴。
※ 編輯: anoymouse (36.227.161.96 臺灣), 10/02/2020 12:05:12