`
shenyu
  • 浏览: 122977 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

递归-求幂

阅读更多

计算幂,n^m,其中n为底数,m为幂
当m取值比较大时如果采用m个n相乘的办法,计算显得冗长。


可以采用以下方法重新组织算法:


n^m == n^((m/2) * 2)
n^m == (n^(m/2))^2


假设如果可以求得temp = n^(m/2),则n^m = temp * temp
这里采用了递归的做法,将n^m问题转换成为n^(m/2)的问题,将近减少了一半运算量。

特殊情况是m不是偶数的情况,这种状况下:


temp = n^(m/2)
n^m = temp * temp * n (多乘一次就可以解决这个问题)


时间代价从原来的O(m) 变成了 O(log m),再这种情况下递归可以提高运行效率。

代码如下:

class Power {
	public static void main(String[] args) {
		for(int i=0; i< 11; i++) {
			System.out.print(power(3,i) + " ");
		}
		System.out.println();
	}

	private static long power(int n, int m) {
		assert m >= 0;
		if(m == 0) return 1;
		if(m == 1) return n;
		long temp = power(n,m/2);
		return m%2 == 0? temp * temp: temp * temp * n;
	}
}
 
3
4
分享到:
评论
1 楼 wpf523 2012-04-11  
不错,的算法

相关推荐

    递归求幂c++源码

    一个简单的递归求幂的c++源代码,简单易懂适合初学者引用研究.

    算法-数论- 快速幂.rar

    快速幂是一种高效的算法,常用于计算大整数的幂次,尤其在计算机科学和数学问题中,例如模幂运算、因数分解等。这个压缩包文件"算法-数论- 快速幂.rar"包含了一个名为"数论- 快速幂.pdf"的文档,很可能是对快速幂...

    算法学习笔记-快速幂.docx

    快速幂算法,又称指数运算的平方求幂法,是一种高效计算幂次运算的方法。通过利用指数的二进制表示,快速幂可以在对数时间内完成计算,相较于传统的逐次乘法方式,效率有了显著提升。本文将详细介绍快速幂算法的基本...

    python递归求简单交错幂级

    递归求简单交错幂级

    用递归求次方

    ### 用递归求次方 #### 知识点概览 1. **递归的基本概念** 2. **递归的实现方式** 3. **递归求次方的原理** 4. **递归求次方的代码实现** 5. **递归求次方的效率分析** 6. **递归与迭代的比较** #### 递归的基本...

    c语言非递归快速幂demo

    快速幂是一种高效的算法,常用于计算大整数的乘方,尤其在处理...在实际编程中,快速幂算法经常被用于计算模幂(即求模运算后的乘方结果),这对于解决数论和图论中的许多问题非常有用,例如欧拉函数、中国剩余定理等。

    C++使用递归算法求交错幂集

    在本文中,我们将深入探讨交错幂集的定义,并通过一个C++程序来理解如何使用递归算法来实现它。 首先,交错幂集P(S)定义为集合S的所有n元子集的集合,其中每个元素x满足x1 ≠ x2,当1 ≤ i ≤ n。这意味着在构造...

    表达式求值与幂运算算法

    上述快速乘法算法包含递归和非递归两种实现方式,递归的快速乘法使用了与递归幂运算类似的思想,通过分解问题规模来达到优化的效果;而非递归版本则是通过循环,逐步累加计算结果。 最后,文档还介绍了表达式求值的...

    算法实践:2的幂次方表示(递归)

    2的幂次方表示 描述 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HjnOLAKd-1583034303750)(C:\Users\HUAWEI\AppData\Roaming\Typora\typora-user-images\image-20200301114236455.png)]...

    递归算法习题

    对于求解x的m次幂,可以通过递归将问题转化为求x的(m-1)次幂,并且每次递归时乘以x。 3. 递归算法求解错排问题(所有信都装错信封的不同情况) 错排问题是指所有信封与信件不匹配的排列方式的数量。可以通过递归...

    递归九讲2021 7-9.zip

    非递归实现通常涉及动态规划或循环结构,如Fibonacci序列的矩阵快速幂算法。 1. **组合问题**:不考虑元素顺序,只需计算n个元素中取k个的组合数。 2. **递归公式**:C(n,k) = C(n-1,k-1) + C(n-1,k),对于k=0和k=n...

    算法设计与优化第六章递归法经典例题(如最大值,母牛繁殖,x的n次幂等共5个)

    本主题涵盖了5个使用C语言编写的递归法经典例题,包括找到数组中的最大值、模拟母牛繁殖、计算x的n次幂、求一个整数各数字的和以及输出整数的各位数字。下面将详细解释这些知识点: 1. **最大值**:在"最大值.c...

    串行FFT递归算法(蝶式递归计算原理)求傅里叶变换.pdf

    **串行 FFT 递归算法(蝶形递归计算原理)求傅里叶变换** 傅里叶变换是一种在数学和工程领域广泛使用的分析工具,它能够将信号从时域转换到频域,揭示信号的频率成分。快速傅里叶变换(FFT)是离散傅里叶变换(DFT...

    算法-幂次方(洛谷-P1010)(包含源程序).rar

    这个题目主要涉及的算法是幂次方计算,即求一个数的幂。在计算机科学中,高效的幂运算对于解决各种数学和算法问题至关重要。 在计算机科学中,快速幂算法(Fast Exponentiation)是一种用于高效计算 a^n 的方法,...

    C语言求幂计算的高效解法

    本文将详细介绍C语言中实现高效幂运算的两种方法:位操作法和递归法,并对它们的应用场景、实现原理以及优缺点进行深入分析,同时也会涉及到浮点数求幂的情况,为编程者提供一份详尽的参考。 ### 位操作法解法 位...

    suanfa.zip_求幂

    然而,快速求幂算法能够将乘法次数大幅减少,它的基本步骤是将指数分解为2的幂次的和,然后利用平方运算进行递归,这样每次递归都几乎将问题规模减半。当指数为偶数时,问题规模直接减半;当指数为奇数时,还需额外...

    C++递归与分治法实现报告

    实验包含了三个程序,分别展示了递归在二分查找和计算幂次运算中的应用,以及分治法的一个实例。 1. 递归算法: - 二分查找(binary_search):递归地将查找范围减半,直到找到目标值或确定不存在为止。这种方法的...

    C、c++ 递归代码

    4. **数学问题**:计算阶乘、求幂运算、求汉诺塔等问题。 5. **数据结构操作**:如链表的反转、队列和堆的操作等。 理解递归需要注意以下几点: - **效率**:递归可能会导致大量的函数调用,增加额外的开销。在...

    算法-幂的末尾(信息学奥赛一本通-T1084)(包含源程序).rar

    快速幂算法是解决这类问题的一种高效方法,通过递归或迭代将幂运算的时间复杂度降低到对数级别,显著提高了计算速度。 题目可能要求参赛者找出一个整数的幂的末尾几位数字,或者判断两个幂的末尾是否有某种特定关系...

    大数的加、减、乘、除、求幂运算

    以上就是大数的加、减、乘、除、求幂运算的基本原理和实现方式。在C/C++中,这些操作是通过自定义的数据结构和算法实现的,需要对位运算、数组操作和递归等有深入理解。在处理大数时,正确性和效率都是需要考虑的...

Global site tag (gtag.js) - Google Analytics