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

原创 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;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ikownyou/article/details/65633581

递归算法讲解

原作者:书呆子Rico 《递归的内涵与经典应用》 http://my.csdn.net/justloveyou_摘要:  大师 L. Peter Deutsch 说过:To Itera...
  • sinat_38052999
  • sinat_38052999
  • 2017-06-15 22:11:51
  • 9381

递归算法深入浅出一:递归理论概述和常见递归算法罗列

递归可以说是很多基础程序员甚至有一定开发能力程序员包括我这个小菜的痛点和痒点!但有一句话很经典: 出来混,迟早是要还的!   将我自己的一些总结写出来和大家分享下,有意见、建议的朋友麻烦高抬贵手...
  • nthack5730
  • nthack5730
  • 2017-03-24 01:54:00
  • 18429

递归算法

目录: 1.简单递归定义 2.递归与循环的区别与联系 3.递归的经典应用 1.简单递归定义 什么叫递归?(先定义一个比较简单的说法,为了理解,不一定对) 递归:无限调用自身这个函数,每次调...
  • feizaoSYUACM
  • feizaoSYUACM
  • 2017-02-08 00:20:28
  • 9699

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

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

递归算法的经典运用

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

怎么更好地终极理解递归算法

递归真是个奇妙的思维方式。对一些简单的递归问题,我总是惊叹于递归描述问题和编写代码的简洁。但是总感觉没能融会贯通地理解递归,有时尝试用大脑去深入“递归”,层次较深时便常产生进不去,出不来的感觉。这种状...
  • StruggleShu
  • StruggleShu
  • 2016-04-03 17:31:35
  • 13326

五大经典算法一 递归与分治

递归算法:直接或者间接不断反复调用自身来达到解决问题的方法。要求原始问题可以分解为相同问题的子问题。、 需要: 1 递归边界 2 自身调用 特点分析: 递归思路简单清晰,如果分析出将很快得到结果;递归...
  • yanerhao
  • yanerhao
  • 2017-03-21 12:06:30
  • 1623

递归算法练习

题目:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子? 题目分析:经过7个村庄后还剩两只...
  • thegreatmz
  • thegreatmz
  • 2017-05-21 14:12:26
  • 1170

java递归算法总结

1.何为递归 个人理解就是自己调用自己,直到满足一个条件结束自己调用自己的过程,这个就是递归。举一个通俗的点的例子: 假设你在一个电影院,你想知道自己坐在哪一排,但是前面人很多,你懒得去数了,于是你问...
  • tomcat_2014
  • tomcat_2014
  • 2016-04-10 17:30:43
  • 10627

递归算法学习

汉诺塔问题 如图,汉诺塔问题是指有三根杆子A,B,C。C杆上有若干碟子,把所有碟子从A杆上移到C杆上,每次只能移动一个碟子,大的碟子不能叠在小的碟子上面。求最少要移动多少次? 当n=1时:...
  • miaoca
  • miaoca
  • 2017-03-14 09:18:28
  • 787
收藏助手
不良信息举报
您举报文章:递归算法及经典递归例子代码实现
举报原因:
原因补充:

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