编写一个递归算法,求解m的n次方。
我们一般求解m的n次方,一般使用n个m相乘的办法来求解。其实我们还可以使用另外一种更有效率的办法求解这个问题。我们知道一个数的0次方等于1,一个数的1次方等于该数本身。如果一个数的n次方的n可以被2整数,我们可以将求解的问题,分解为m的(n/2)次方乘以m的(n/2)次方。如果不能被2整除,则可以将问题求解转变为m乘以m的(n-1)次方,通过这个递归的办法,我们可以很快的分解求出问题。编写代码如下:
#include <stdio.h>
unsigned long myPow(int m, int n)
{
unsigned long tmp;
if(n == 0)
return 1;
if(n == 1)
return m;
if(n % 2 == 0){
tmp = myPow(m, n/2);
return tmp*tmp;
}
else{
return m*myPow(m, n-1);
}
}
int main(int argc, char *argv[])
{
int m,n;
printf("please input the bottom number.\n");
scanf("%d", &m);
printf("please input the exponent number.\n");
scanf("%d", &n);
printf("the result of power(%d,%d) is %ld\n", m, n, myPow(m, n));
return 0;
}
程序执行结果如下:
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ gcc 6.14.c
peng@ubuntu:~/src/test/c/suanfa/miaoqu$ ./a.out
please input the bottom number.
5
please input the exponent number.
5
the result of power(5,5) is 3125
分享到:
相关推荐
本主题涵盖了5个使用C语言编写的递归法经典例题,包括找到数组中的最大值、模拟母牛繁殖、计算x的n次幂、求一个整数各数字的和以及输出整数的各位数字。下面将详细解释这些知识点: 1. **最大值**:在"最大值.c...
6.14 递归法求幂 6.15 汉诺Hanoi塔 6.16 选美比赛 第7章 数据结构趣题 7.1 顺序表的就地逆置 7.2 动态数列排序 7.3 在原表空间进行链表的归并 7.4 约瑟夫环 7.5 二进制/八进制转换器 7.6 回文字符串的判定 7.7 ...
### 用递归求次方 #### 知识点概览 1. **递归的基本概念** 2. **递归的实现方式** 3. **递归求次方的原理** 4. **递归求次方的代码实现** 5. **递归求次方的效率分析** 6. **递归与迭代的比较** #### 递归的基本...
非递归求幂算法通常采用的是二进制的指数分解法,这种方法的核心思想是将指数n表示为2的幂次和的形式。具体实现时,通过不断地将n除以2并取余数来得到底数相乘的序列,最终通过累乘得到a的n次幂。在这个过程中,利用...
以上就是大数的加、减、乘、除、求幂运算的基本原理和实现方式。在C/C++中,这些操作是通过自定义的数据结构和算法实现的,需要对位运算、数组操作和递归等有深入理解。在处理大数时,正确性和效率都是需要考虑的...
在C语言中,进行幂运算通常有两种常见的高效解法,分别是位操作法和递归法。这两种方法在处理整数次方的幂运算时尤其有效,可以显著提高计算效率。 首先,位操作法是利用二进制位的特性来优化计算过程。在`cacExp`...
在本压缩包中,"32365.rar"包含了一系列关于数值分析的MATLAB代码,用于实现几种重要的数值计算方法,如二分法、幂法、幂迭代法以及插值法。这些方法在工程、物理、经济和科学计算等多个领域有着广泛的应用。 首先...
本文主要讲解如何使用递归方法实现求集合的幂集。首先,我们要理解集合的幂集概念。 **集合的幂集**指的是原集合中所有可能的子集构成的集合,包括空集和全集自身。例如,对于集合{1, 2, 3},其幂集包含{1, 2, 3}, ...
拉格朗日级数是数学中的一种级数展开方式,通常用来近似表示某些函数,如e的x次幂。在给出的题目中,我们要计算的是: \[ \sum_{k=1}^{n} \frac{x^{2k-1}}{(2k-1)!} \] 这个表达式实际上是e的x次幂的泰勒级数展开...
实验包含了三个程序,分别展示了递归在二分查找和计算幂次运算中的应用,以及分治法的一个实例。 1. 递归算法: - 二分查找(binary_search):递归地将查找范围减半,直到找到目标值或确定不存在为止。这种方法的...
如果数字不为0,则将其与10的幂相乘,然后与当前结果相加,同时将数字除以10,直到数字变为0。这样就可以得到一个表示原数字的字符串。 接下来,我们讨论如何建立包含加法函数和减法函数的动态链接库(DLL)。在C++...
本代码是用java实现的快速傅里叶变换的递归实现,要求使用者要按多项式的幂的升序来输入系数
此外,递归或循环的简单幂运算方法在处理大幂时效率低下,可能导致栈溢出或运行时间过长。因此,我们需要设计更高效且能处理大数的模拟幂运算算法。 三、模拟幂运算的算法 1. **快速幂算法**:快速幂是模拟幂运算...
对于求解x的m次幂,可以通过递归将问题转化为求x的(m-1)次幂,并且每次递归时乘以x。 3. 递归算法求解错排问题(所有信都装错信封的不同情况) 错排问题是指所有信封与信件不匹配的排列方式的数量。可以通过递归...
通过上述Java程序的解析,我们不仅学习了如何在Java中实现`a`的`n`次幂计算,还深入了解了递归算法的工作原理及其在实际应用中的优势。这种类型的程序设计不仅可以帮助初学者理解基本的编程概念,还能为更复杂的算法...
然而,递归法的时间复杂度是O(2^n),因为每个递归调用都会产生两个新的调用(除非指数是2的幂)。这在指数较大时会导致大量的函数调用和栈空间占用,效率较低。 在实际应用中,Java中的`Math.pow()`方法使用了更...
二分求幂是一种更为高效的幂运算方法,其核心思想在于将幂运算过程拆分成更小的子问题,并通过递归或迭代的方式逐步解决。具体来说,假设我们要计算`a^n`,可以通过先计算`a^(n/2)`,再将其平方来得到结果。若`n`为...
在这个实现中,需要注意处理负指数的情况,因为C++中的整数除法向下取整,所以当n为负数时,需要先取x的倒数,然后再进行递归计算。 两种实现方式各有优缺点。迭代版通常更快且空间复杂度较低,因为它避免了递归...
1. **循环法**:通过循环累乘的方式实现,从1乘到y,每次将x自乘,最后得到的结果就是x的y次幂。这种方法简单直观,但效率较低,尤其当y非常大时,计算次数会非常多。 2. **快速幂**:这是一种高效的幂运算算法,...
递推法是一种直接根据递归方程的定义来求解递归方程的方法。这种方法适用于那些可以直接通过迭代计算来找到规律的递归方程。 **例1:Hanoi塔问题** Hanoi塔问题是一个经典的递归问题,其递归方程可以表示为: \[T...