-2

我的课程作业需要一点帮助 如果您从未听说过,这就是印度算法。我可以使用递归轻松地做到这一点,但不知道如何使用循环来解决它?有什么提示或建议吗?

印度算法:

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;
}
4

1 回答 1

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;
}  

有关更多详细信息,请参阅平方求幂

于 2013-10-22T20:10:33.023 回答