2013-10-22 42 views
-2

我需要一點幫助,我的課程這是印度算法,如果你從來沒有聽說過它。 我可以很容易地做到這一點使用遞歸,但無法計算如何使用循環來解決它?任何暗示或建議?印度算法使用while循環

印度算法:

3^10 = square (3^5)   
3^5 = 3 * (3^4)    
3^4 = square (3^2)    
3^2 = square (3^1)    
3^1 = 3 * (3^0)    
3^0 = 1 

double powerloop(double x, int n) 
{ 
    double m=x; 
    if (n==0) 
    return 1; 
    while(n>1) 
    { 
    if(n%2==0) 
    { 
     m=m*m; 
     n=n/2; 
    } 
    else 
    { 
     m=m*x; 
     n=n-1; 
    } 
    } 
    return m; 
} 
+3

另外,如果您要求我們檢查這是否有效,我們實際上需要知道印度算法是什麼。 –

+1

同意。谷歌搜索印度算法出現*這篇文章*作爲最重要的結果,我看不到其他有意義的條目。 – BlackVegetable

+1

看起來像複製和粘貼從http://forum.notebookreview.com/programming-homework-questions/426810-how-implement-indian-algorithm-using-while-loop.html - 也有答案 –

回答

0

試試這個

double powerloop(double x, int n) 
{ 
    double m = 1; 

    while (n != 0) 
    { 
     if (n % 2 == 1) 
     { 
      m *= x; 
       --n; 
     } 

     x *= x; 
     n /= 2; 
    } 

    return m; 
} 

有關更多詳細信息,請參閱Exponentiation by squaring

+0

爲什麼要投票?請留下您的評論。 – haccks

+0

我沒有downvote,但問題說這是一個課程,並要求提示或建議。 –

+0

我也沒有downvote,但只是代碼的答案,沒有解釋通常不是很有用。 – Kninnug