[問題] 用recursive寫pow

作者: ForWin (For Windows)   2016-11-17 20:51:59
開發平台(Platform): (Ex: Win10, Linux, ...)
Win7
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
TDM-GCC 4.9.2 64-bit Release
問題(Question):
看了一段關於用recursive寫pow函式的code,不太懂
餵入的資料(Input):
myPow(2,2)
預期的正確結果(Expected Output):
1
程式碼(Code):(請善用置底文網頁, 記得排版)
1. double myPow(double x, int n) {
2. if (x==0) return 0;
3. if (n==0) return 1;
4. if(n<0){
5. x = 1/x;
6. n=-n;
7. }
8. if(n%2==0){
9. return myPow(x*x,n/2);
10. }else{
11. return x*myPow(x*x,n/2);
12. }
13. }
補充說明(Supplement):
我在return的部分有問題,始終搞不太懂
這程式的結果是正確的
但我的思緒如下
一開始餵入myPow(2,2),會跑到第9行
而此時myPow說我不知道,你等等,我return myPow(4,0)給你
而這時候應該跑到第3行,return 1
所以我預期要跑出1
不過這支程式卻能夠正確跑出4
究竟myPow(2,2)是怎麼從myPow(4,0)拿到4這個值的呢?
不知道我的觀念是不是有什麼地方出錯卡住了
但如果是以下這種寫法我就能理解
double myPow(double x, int n) {
if (x==0) return 0;
if (n==0) return 1;
if(n>0){
return x*myPow(x,n-1);
}
}
還望各位高手幫忙看看我的問題出在哪
謝謝各位
作者: tsoahans (ㄎㄎ)   2016-11-17 20:55:00
n/2怎麼會是0
作者: ForWin (For Windows)   2016-11-17 20:58:00
...我蠢斃了...謝謝樓上....版主能幫刪這篇嗎XDDDD
作者: pttworld (批踢踢世界)   2016-11-17 21:25:00
y=myPow(x,n/2); 回傳y*y*x和y*y。

Links booklink

Contact Us: admin [ a t ] ucptt.com