递归算法及经典递归例子代码实现

原创 2017年03月24日 17:28:19

一、什么叫做递归?

一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法;

递归函数就是直接或间接调用自身的函数,也就是自身调用自己;


二、一般什么时候使用递归?

   递归时常用的编程技术,其基本思想就是“自己调用自己”,一个使用递归技术的方法即是直接或间接的调用自身的方法。递归方法实际上体现了“以此类推”、“用同样的步骤重复”这样的思想,它可以用简单的程序来解决某些复杂的计算问题,但是运算量较大。
    还有些数据结构如二叉树,结构本身固有递归特性;此外,有一类问题,其本身没有明显的递归结构,但用递归程序求解比其他方法更容易编写程序,如八皇后问题、汉诺塔问题等。

    正因为递归程序的普遍性,我们应该学会使用递归来求解问题。直接递归程序与间接递归中都要实现当前层调用下一层时的参数传递,并取得下一层所返回的结果,并向上一层调用返回当前层的结果。至于各层调用中现场的保存与恢复,均由程序自动实现,不需要人工干预。因此,在递归程序的设计中关键是找出调用所需要的参数、返回的结果及递归调用结束的条件。

三、实例

1.递归求和1+2+3+.....+n

public static Integer recursionSum(Integer n){
   if(n>0){
      return n+recursionSum(n-1);
   }else{
      return 0;
   }
}
2.递归阶乘n! = n * (n-1) * (n-2) * ...* 1(n>0)

public static Integer recursionMulity(Integer n){
   if(n==1){
      return 1;
   }
   return n*recursionMulity(n-1);
}
3.河内塔问题


4.判定一系列字符串中是否有相同的内容

public static boolean fun(int n,String[] a){
   boolean b = false;
   if(n == a.length){
      b = true;
   }else{
      for(int i = n; i < a.length-1; i++){
         System.out.println(n+"    "+(i+1));
         if(a[n].equals(a[i+1])){
            return false;
         }
      }
      n++;
      fun(n,a);
   }
   return b;
}

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

递归算法的经典运用

递归(recursion):程序调用自身的编程技巧 递归满足两个条件: (1)有反复执行的过程(调用自身) (2)有跳出反复执行过程的条件(递归出口)递归例子(常用的地方): (1)阶乘 n...
  • OREO_GO
  • OREO_GO
  • 2016年04月01日 09:54
  • 2973

【算法】递归(recursion)+经典例题个人分析

定义(个人理解) 1.自己调用比自己小一个规模的自己。 2.有结束条件。 3.对问题的细化。 ps: 大家可以通过这个效应感性的感受一下递归。 德罗斯特效应: ******...
  • wait_for_taht_day5
  • wait_for_taht_day5
  • 2015年12月04日 14:31
  • 5108

15个典型的递归算法的JAVA实现

  • 2014年04月02日 18:06
  • 39KB
  • 下载

递归算法以及C语言实例分析

无聊开篇大二下半学期才开始接触算法这门课程,简单的说来之前学习的是C/C++还有数据结构,反正我所在的学校是这样安排的,不知道其他学校计算机学院是怎样安排的,就算知道对自己也没有多大的影响。网上看到一...
  • sinat_27714067
  • sinat_27714067
  • 2016年04月04日 20:31
  • 9686

递归算法小例子

程序调用自身的编程技巧称为递归( recursion)。 一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递...
  • csd_xiaojin
  • csd_xiaojin
  • 2012年09月06日 11:05
  • 27763

Java递归算法经典实例(兔子问题、阶乘、1到100累加)

题目:古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:首先我们要明白题目的意思指的是每个月的兔子总对数;假设将兔子分为小...
  • IsITMan
  • IsITMan
  • 2017年03月10日 17:57
  • 5066

递归的几个经典例子

通俗的说,递归就是函数调用其自身。在不讲究算法复杂度的情形下,递归所解决的问题for循环都能解决。正如很多优秀算法一样,递归蕴含着解决问题的精华思想,他将一个深入问题纵向分离为一系列问题,逐步解决,直...
  • zakachen
  • zakachen
  • 2016年08月28日 14:17
  • 2882

C++递归算法经典实例详解

小白博客,记录多于科普
  • junloin
  • junloin
  • 2017年03月02日 22:25
  • 5304

一个经典的递归算法题(实例+源码)

目的:动手做小程序 需求:这里有一组数:1、1、2、3、5、8、13、21、34、55......要求计算用这个递归算法,计算出这组数的第40个数是多少? 斐波纳契数列的定义:它的第一项和第二项均...
  • xifeijian
  • xifeijian
  • 2013年01月13日 18:43
  • 24107

递归算法详解

递归算法详解         C语言通过运行时堆栈来支持递归的调用,在我们刚接触递归的时候,国内很多教材都采用求阶乘和菲波那契数列来描述该思想,就如同深受大家敬爱的国产的C语言程序设计,老谭也用...
  • effective_coder
  • effective_coder
  • 2013年04月06日 18:25
  • 15620
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:递归算法及经典递归例子代码实现
举报原因:
原因补充:

(最多只允许输入30个字)