伊莉討論區

標題: 買書自學遇到的問題 用遞回函式 求x的y次方 [打印本頁]

作者: cht1902316    時間: 2017-2-14 11:14 PM     標題: 買書自學遇到的問題 用遞回函式 求x的y次方

我很努力的去想了 就是 不知道 怎麼把 函式定義內的 其中一個x 固定 . 我也不清楚我 寫的是不是 遞回函式
--------------------------------------以下有圖片------------------------------------------------------

作者: tryit244178    時間: 2017-2-15 12:10 PM

簡單的說就是通過呼叫自已,把運算出來的結果再跟自已運算
請參考看看
  1. int power( int x, int y )
  2. {
  3.    if ( y == 1 )
  4.       return x;

  5.    return x * power( x, y - 1 );
  6. }
複製代碼


作者: cht1902316    時間: 2017-2-15 09:44 PM

tryit244178 發表於 2017-2-15 12:10 PM
簡單的說就是通過呼叫自已,把運算出來的結果再跟自已運算
請參考看看

感謝您~~{:31:                  
作者: coal511464    時間: 2017-2-19 06:57 PM

power 這類的函式建議可以inline
作者: ren1244    時間: 2017-3-14 12:06 AM

本帖最後由 ren1244 於 2017-3-14 12:43 AM 編輯

提供另外一個參考答案:
  1. float power(float x,unsigned y)
  2. {
  3.         float t;
  4.         if(y<=1)
  5.                 return y==1?x:1.0;
  6.         t=power(x,y/2);
  7.         return y%2?t*t*x:t*t;
  8. }
複製代碼
這也是遞迴的寫法,但是速度比之前更快。
例如計算3的13次方
原本的方法是:3*3*3*3*3*3*3*3*3*3*3*3*3,要跑13次
而這個版本的方法是:((3[sup]2[/sup]*3)[sup]2[/sup])[sup]2[/sup]*3,大約跑4次

圖示說明:
[attach]118031724[/attach]
作者: joshchao210492    時間: 2017-3-31 10:47 AM

power 這類的函式建議可以inline
作者: b0920075    時間: 2017-4-18 10:11 PM

我剛好在演算法筆記看到這個主題,也依樣畫葫蘆寫了一個,用的是dc法:
    http://ideone.com/1wmeFR
   
作者: ren1244    時間: 2017-4-19 04:14 AM

b0920075 發表於 2017-4-18 10:11 PM
我剛好在演算法筆記看到這個主題,也依樣畫葫蘆寫了一個,用的是dc法:
    http://ideone.com/1wmeFR
     ...

這方法跟我前面寫的很類似,只是多了一個表格可以查表。
好處是計算到重覆的數值可以直接得到結果。
但是也會產生一個問題:
假如今天使用者先算5[sup]5[/sup],再算3[sup]5[/sup]。
因為計算後者時會以為是一樣的,結果丟出錯誤的結果!

作者: b0920075    時間: 2017-4-20 08:00 PM

ren1244 發表於 2017-4-19 04:14 AM
這方法跟我前面寫的很類似,只是多了一個表格可以查表。
好處是計算到重覆的數值可以直接得到結果。
但是 ...

你是說如果是要算3^5*5^5的時候嗎?這個是我練習用DC寫exp的,所以不是完全按照樓主的要求啦




歡迎光臨 伊莉討論區 (http://s03.p04.eyny.com/) Powered by Discuz!