[問題] 用recursive寫pow

看板C_and_CPP作者 (For Windows)時間9年前 (2016/11/17 20:52), 編輯推噓1(103)
留言4則, 3人參與, 最新討論串1/1
開發平台(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); } } 還望各位高手幫忙看看我的問題出在哪 謝謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.184.179.4 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1479387121.A.188.html

11/17 20:55, , 1F
n/2怎麼會是0
11/17 20:55, 1F

11/17 20:58, , 2F
...我蠢斃了...謝謝樓上....
11/17 20:58, 2F

11/17 20:58, , 3F
版主能幫刪這篇嗎XDDDD
11/17 20:58, 3F

11/17 21:25, , 4F
y=myPow(x,n/2); 回傳y*y*x和y*y。
11/17 21:25, 4F
文章代碼(AID): #1OBQVn68 (C_and_CPP)