`
刘彦明
  • 浏览: 7645 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

递归法求幂

阅读更多
    编写一个递归算法,求解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
分享到:
评论

相关推荐

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

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

    《妙趣横生的算法(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语言求幂计算的高效解法

    在C语言中,进行幂运算通常有两种常见的高效解法,分别是位操作法和递归法。这两种方法在处理整数次方的幂运算时尤其有效,可以显著提高计算效率。 首先,位操作法是利用二进制位的特性来优化计算过程。在`cacExp`...

    32365.rar_二分法_幂法 matlab_幂迭代法_数值分析代码_迭代法例题

    在本压缩包中,"32365.rar"包含了一系列关于数值分析的MATLAB代码,用于实现几种重要的数值计算方法,如二分法、幂法、幂迭代法以及插值法。这些方法在工程、物理、经济和科学计算等多个领域有着广泛的应用。 首先...

    python利用递归方法实现求集合的幂集

    本文主要讲解如何使用递归方法实现求集合的幂集。首先,我们要理解集合的幂集概念。 **集合的幂集**指的是原集合中所有可能的子集构成的集合,包括空集和全集自身。例如,对于集合{1, 2, 3},其幂集包含{1, 2, 3}, ...

    (x/1!)+(x*x*x/3!)+(5个x相乘/5!)+……+(2*n-1)个x相乘/(2*n-1)!)

    拉格朗日级数是数学中的一种级数展开方式,通常用来近似表示某些函数,如e的x次幂。在给出的题目中,我们要计算的是: \[ \sum_{k=1}^{n} \frac{x^{2k-1}}{(2k-1)!} \] 这个表达式实际上是e的x次幂的泰勒级数展开...

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

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

    汉诺塔问题,用递归法将一个整数n转换成字符串, 建立一个包含加法函数、减法函数的动态链接库文件和一个包含加法函数、减法函数的函数声明的头文件;编写、调试并运行一个MFC应用程序,该MFC应用程序调用了你所建立的动态链接库中的加法函数、减法函数。

    如果数字不为0,则将其与10的幂相乘,然后与当前结果相加,同时将数字除以10,直到数字变为0。这样就可以得到一个表示原数字的字符串。 接下来,我们讨论如何建立包含加法函数和减法函数的动态链接库(DLL)。在C++...

    FFt快速傅里叶变换的递归实现

    本代码是用java实现的快速傅里叶变换的递归实现,要求使用者要按多项式的幂的升序来输入系数

    模拟幂运算,可求超出数据表示范围的较大幂值

    此外,递归或循环的简单幂运算方法在处理大幂时效率低下,可能导致栈溢出或运行时间过长。因此,我们需要设计更高效且能处理大数的模拟幂运算算法。 三、模拟幂运算的算法 1. **快速幂算法**:快速幂是模拟幂运算...

    递归算法习题

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

    a的n次幂计算

    通过上述Java程序的解析,我们不仅学习了如何在Java中实现`a`的`n`次幂计算,还深入了解了递归算法的工作原理及其在实际应用中的优势。这种类型的程序设计不仅可以帮助初学者理解基本的编程概念,还能为更复杂的算法...

    runtimeAnalysis:幂函数:迭代Vs。 递归的

    然而,递归法的时间复杂度是O(2^n),因为每个递归调用都会产生两个新的调用(除非指数是2的幂)。这在指数较大时会导致大量的函数调用和栈空间占用,效率较低。 在实际应用中,Java中的`Math.pow()`方法使用了更...

    快速幂及其相关知识

    二分求幂是一种更为高效的幂运算方法,其核心思想在于将幂运算过程拆分成更小的子问题,并通过递归或迭代的方式逐步解决。具体来说,假设我们要计算`a^n`,可以通过先计算`a^(n/2)`,再将其平方来得到结果。若`n`为...

    C++实现的快速幂算法-Pow(x,n),本算法实现了迭代和递归两个版本

    在这个实现中,需要注意处理负指数的情况,因为C++中的整数除法向下取整,所以当n为负数时,需要先取x的倒数,然后再进行递归计算。 两种实现方式各有优缺点。迭代版通常更快且空间复杂度较低,因为它避免了递归...

    易语言求x的y次幂源码.7z

    1. **循环法**:通过循环累乘的方式实现,从1乘到y,每次将x自乘,最后得到的结果就是x的y次幂。这种方法简单直观,但效率较低,尤其当y非常大时,计算次数会非常多。 2. **快速幂**:这是一种高效的幂运算算法,...

    递归方程求解

    递推法是一种直接根据递归方程的定义来求解递归方程的方法。这种方法适用于那些可以直接通过迭代计算来找到规律的递归方程。 **例1:Hanoi塔问题** Hanoi塔问题是一个经典的递归问题,其递归方程可以表示为: \[T...

Global site tag (gtag.js) - Google Analytics