天天看點

每日一小練——數值自乘非遞歸解

上得廳堂,下得廚房,寫得代碼,翻得圍牆,歡迎來到睿不可擋的每日一小練!

題目:數值自乘非遞歸解

内容:

連續求m^n問題(m與n是正整數)。前面的提示會得到一個遞歸程式,請編寫一個運算效率同樣高的非遞歸的程式。

我的解法:上來沒多想,打開vs2013就敲了起來,問題果然很簡單,分分鐘就超神。。奧,不對就解決了!如果是非遞歸其實一種簡單的方法就是把,

遞歸的幾種分類做好if分支,用一個循環處理就好了,不過如果我們認真思考m^n這個式子,我們會發現n如果用二進制表示的話如:2^7可改寫為

2^0111即為2^(2^0) x 2^(2^1) x 2^(2^2) ,是以其實所用的數都能用這樣的方式表示的:i1*m^(2^0)+i2*m^(2^1)+.... 

而m^(2^(i+1))=m^(2^i*2)=(m^(2^i))^2=m^(2^i)*m^(2^i)是以我們就可以利用這些原理進行循環了。

實驗結果:

每日一小練——數值自乘非遞歸解

歡迎大家加入每日一小練,嘿嘿!

每天練一練,日久見功夫,加油!

            -End-

參考文獻:《c語言名題精選百則》

繼續閱讀