码迷,mamicode.com
首页 > 其他好文 > 详细

求幂的递归和非递归实现

时间:2015-07-22 19:05:37      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:求幂   递归   非递归   

递归版本的实现:

long long int  Pow1(int x,unsigned int N)
{
	if (N == 0)
	{
		return 1;
	}
	if (N & 0x01)
	{
		return Pow(x * x,N >> 1) * x;
	}
	else
		return Pow(x * x,N >> 1);
}
递归 的基准条件是:N==0  此时返回1(不调用自身)。若N是偶数,则x的N次方等于 x*x的N/2次方。若N是奇数,则x的N次方等于 x*x的N/2次方在乘以x。N/2可以用N右移一位来实现。


非递归版本的实现:

long long int  Pow(int x,unsigned int N)
{
	long long int n = x;
	long long int ans = 1;
	while (N)
	{
		if (N & 0x01)
		{
			ans *= n;
		}
		n *= n;
		N = N >> 1;
	}
	return ans;
}
把N用二进制来表示,例如N=9,则二进制为:1001,x的N次方就等于x乘以x的8次方,再比如,1111,则就是x乘以x的平方再乘x的四次方,再乘x的八次方。因此可以用一个变量n(初始为x)来保存x的幂次。然后开始循环,若N最右位为1,则结果乘以n,然后让n平方,N右移。

版权声明:本文为博主原创文章,未经博主允许不得转载。

求幂的递归和非递归实现

标签:求幂   递归   非递归   

原文地址:http://blog.csdn.net/csdnjack_/article/details/47004523

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!