精华内容
下载资源
问答
  • 递归算法和经典递归例子

    万次阅读 2018-06-28 18:52:55
    一、什么叫递归 递归函数就是直接或间接调用自身的函数,也就是自身调用自己。二、一般什么时候使用递归? 递归是常用的编程技术,其基本思想就是“自己调用自己”,一个使用递归技术的方法即是直接或间接的调用...

    一、什么叫递归

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

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

      递归是常用的编程技术,其基本思想就是“自己调用自己”,一个使用递归技术的方法即是直接或间接的调用自身的方法。递归方法实际上体现了“以此类推”、“用同样的步骤重复”这样的思想。

        还有些数据结构如二叉树,结构本身固有递归特性;此外,有一类问题,其本身没有明显的递归结构,但用递归程序求解比其他方法更容易编写程序。

    三、经典递归算法

     1、递归阶乘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);
    }

    2、汉诺塔问题

    public static void hanio(int n,char a,char b,char c){
     8         if(n==1)
     9             System.out.println("移动"+n+"号盘子从"+a+"到"+c);
    10         else{
    11             hanio(n-1,a,c,b);//把上面n-1个盘子从a借助b搬到c
    12             System.out.println("移动"+n+"号盘子从"+a+"到"+c);//紧接着直接把n搬动c
    13             hanio(n-1,b,a,c);//再把b上的n-1个盘子借助a搬到c
    14         }
    15     }
    

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

    public class Crf{
        public static void main(String[] args) {
            String[] a = {"a1","a2","a3","b3","c","b","33","33"};
            fun(0, a);
        }
        
        public static void fun(int n,String[] a){
            	for(int i = n; i < a.length-1; i++){
                    System.out.println(n+"    "+(i+1));
                    if(a[n].equals(a[i+1])){
                    	System.out.println("存在相同字符");    
                    	System.out.println(a[n]);    
                    }
                }
            n++;
            fun(n,a);
        }
    }



    展开全文
  • 有跳出反复执行过程的条件(递归出口)递归算法在软件竞赛中,考察的非常多我的qq:1527624144 希望大家交流,一起努力进入总决赛经典例子:1.求10的阶乘public class A13 { public static void main(String[] ...

    递归算法在程序中不断反复调用自身的方法调用方式。此处的重点是调用自身

    递归满足两个条件

    1.有反复执行的过程(调用自身)

    2.有跳出反复执行过程的条件(递归出口)


    递归算法在软件竞赛中,考察的非常多

    我的qq:1527624144   希望和大家交流,一起努力进入总决赛


    经典例子:1.求10的阶乘

    public class A13 {
    
    	public static void main(String[] args) {
                int s=f(10);
                System.out.println(s);
    	}
       public static int f(int n)
       {
    	   if(n<=1)  return 1;
    	   return f(n-1)*n;
       }
    }

    经典例子:2.斐波那契数组



    斐波那契数列,又称黄金分割数列,指的是这样一个数列

    1、1、2、3、5、8、13、21、34........
    这个数列从第三项开始,每一项等于两项之和

    public class A15 {
    
    	public static void main(String[] args) {
               int  s= f(8);
    System.out.println(s);
    	}
    	//1、1、2、3、5、8、13、21、34
    	public static int f(int n)  //n表示第几项
    	{
    		if(n==0)  return 0;
    		if(n==1) return 1;
    		
    		return f(n-1)+f(n-2);       //表示n的前一项,加上n的前前一项
    	}
    
    }
    
    

    经典例子:3.排列问题

    //排列问题
    //  计算3个A,2个B可以组成多少排列?
    //如:AAABB  ABAAB
    
    public class A10 {
    
    	public static void main(String[] args) {
          int s=f(3,2);	
          System.out.println(s);
          
    
    	}
       //有m个a,n个b。组成排列
    	public static int f(int m,int n)
    	{
    		if(m==0||n==0) return 1;
    		return f(m-1,n)+f(m,n-1);   //核心思想
    		//平地起风雷    思路:有两种情况:一种是有A的排列组合,一种是没有A的排列组合
           //f(m-1,n)   当组合为第一个A,那么剩下(m-1)个A元素,n个B元素
               //f(m,n-1)   当组合第一个为B,那么剩下(n-1)个B元素,m个A元素
              //然后把他们相加,就是组成了多少排列
    	}	
    	
    		
    
    	
    	
    }

    经典例子:4.取球问题


    在n个球中,任意取m个(不放回),求有多少种取法?


    思路:在n个球中,假设有一个特殊的球X,用划分:一种是包含X的取法,一种是不包含X的取法    

    public class A {
    
    	public static void main(String[] args) {
    	     int k=f(10,3);   //在10个球中,取3个
    	     System.out.println(k);
    	}
    	 public static int f(int n,int m)
    	 {
    		 if(n<m){   return 0;  }//10个球中,总球数 小于  取的球 ,那么只有返回0}
    	     if(n==m){ return 1;  }  //取的球等去总球数,那么只有一种取法
    	     if(m==0){ return 1;}  //如果取0个球 ,那么也只有一种取法
    	 
    	     return f(n-1,m-1)+f(n-1,m);
    	     
    	 
    	 }
    	
    	
    	
    }
    

    以上是关于递归算法的经典应用。递归算法在蓝桥杯中考察的很多

    楼主我也报名参加了蓝桥杯。看过蓝桥直播经验交流会。

    老师说过:1.主要是暴力破解,多层循环的解题模式
    2.深入暴力破解,熟练递归技巧    

    有机会冲击进总决赛。

    我是一名大二的学生,非常想能进入总决赛。下面我来说一下真题,希望看到的朋友能和一起交流,一起努力,进入总决赛




    ————————————————————————————————————————

    真题1  (代码填空)

    代码填空:
    杨辉三角形




                      1                           第一行
                     1  1                        第二行
                    1  2  1                     第三行
                1   3   3    1                 第四行
               1  4  6   4     1              第五行
            1   5  10  10   5   1          第六行

    请填写下面代码
       //递归
           //第m行,第n个元素
         if(n==0)  return n=1
          if(m==n)   return n=1
            return f(m-1,n)+f(m-1,n-1)   //填空

    展开全文
  • 什么是递归函数? 简单定义:当函数直接或者间接调用自己时...求1到5的累加 下面是传统的方式, 我们一般都这样通过迭代来计算累加, 也很好理解. 而事实上, 我们也可以通过递归来完成这样的任务. 只不过, 我们都不

    什么是递归函数?

    简单定义:当函数直接或者间接调用自己时,则发生了递归.” 说起来简单, 但是理解起来复杂, 因为递归并不直观, 也不符合我们的思维习惯, 相对于递归, 我们更加容易理解迭代. 因为我们日常生活中的思维方式就是一步接一步的, 并且能够理解一件事情做了N遍这个概念. 而我们日常生活中几乎不会有递归思维的出现.

    举个简单的例子:
    求1到5的累加和 下面是传统的方式, 我们一般都这样通过迭代来计算累加和, 也很好理解.

    for循环
    而事实上, 我们也可以通过递归来完成这样的任务.
    递归
    只不过, 我们都不这么做罢了, 虽然这样的实现有的时候可能代码更短, 但是很明显, 从思维上来说更加难以理解一些. 当然, 我是说假如你不是习惯于函数式语言的话. 这个例子相对简单, 稍微看一下还是能明白吧.

    作为这么简单的例子, 两种算法其实大同小异, 虽然我们习惯迭代, 但是, 也能看到, 递归的算法无论是从描述上还是实际实现上, 并不比迭代要麻烦.

    理解递归

    在初学递归的时候, 看到一个递归实现, 我们总是难免陷入不停的回溯验证之中, 因为回溯就像反过来思考迭代, 这是我们习惯的思维方式, 但是实际上递归不需要这样来验证.
    要实现递归要书写两个内容:
    一个是满足结束条件的时候结束函数
    一个是不满足结束条件的时候要执行的代码

    我们拿上面案例来作为分析:
    1.我要书写一个函数叫做add
    2.这个函数有形参n,调用的时候:add(n)
    3.我这个add函数的功能是计算任意一个数1到n的累加和。
    这里以n=5来分析
    在这里插入图片描述

    分析思路:

    第一遍
    计算输入的n即n=5;程序开始执行,
    返回的是add( 5 - 1) + 5 的值,即返回的是add(4)+5的值,add(4)的值是多少?
    因为没有具体数值,程序就要去执行add(4),即调用第二遍

    第二遍
    计算add(4),程序开始执行,
    返回的是add( 4 - 1) + 4 的值,即返回的是add(3)+4的值,add(3)的值是多少?
    因为没有具体数值,程序就要去执行add(3),即调用第三遍

    第三遍
    计算add(3),程序开始执行,
    返回的是add( 3 - 1) + 3 的值,即返回的是add(2)+3的值,add(2)的值是多少?
    因为没有具体数值,程序就要去执行add(2),即调用第四遍

    第四遍
    计算add(2),程序开始执行,
    返回的是add( 2 - 1) + 3 的值,即返回的是add(1)+2的值,add(1)的值是多少?
    因为没有具体数值,程序就要去执行add(1),即调用第五遍

    第五遍
    计算add(1),程序开始执行,
    当n==1 时,满足第一个条件,返回的值是1,是一个具体数值,此时函数不在调用自身。
    看到这里我们就应该明白此时

    add(1)=1
    add(2)=add(1)+2 =1+2
    add(3)=add(2)+3=1+2+3
    add(4)=add(3)+4=1+2+3+4
    add(5)=add(4)+5=1+2+3+4+5


    add(n)=add(n-1)+n=1+2+3+4+5+…+n

    注意点:使用递归时,要有结束条件,否则就会“死循环”,造成浏览器崩溃。

    使用递归

    既然递归比迭代要难以理解, 为啥我们还需要递归呢? 从上面的例子来看, 自然意义不大, 但是很多东西的确用递归思维会更加简单……

    经典的例子就是斐波那契数列(Fibonacci sequence),又称黄金分割数列、
    因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,
    指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,
    斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3)

            有了递归的算法, 用程序实现实在再简单不过了:
    

    递归
    改为用迭代实现呢? 你可以试试.

    递归的问题

    当然, 这个世界上没有啥时万能的, 递归也不例外, 首先递归并不一定适用所有情况, 很多情况用迭代远远比用递归好了解, 其次, 相对来说, 递归的效率往往要低于迭代的实现, 同时, 内存耗用也会更大, 虽然这个时候可以用尾递归来优化, 但是尾递归并不是一定能简单做到.它是依据数据结构的栈的原理,不断开辟新的内存空间以满足程序需要,而不是不断改变已有内存空间的值来满足程序需要,所以递归是一种极具消耗内存资源的算法思维,所以在现实项目中,除非代码量影响过大,否则能不用递归就不用递归.

    参考

    精通递归程序设计

    创作不易,点个赞吧!!

    版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
    本文链接:https://blog.csdn.net/qms888888

    展开全文
  • 递归算法

    2013-10-15 17:21:06
     递归算法的思想:将复杂的问题分成同类的几个小问题,通过自身算法调用自身算法,... 经典例子:汉诺塔问题,解决这类问题,关键是抓住问题的入口出口。  递归算法网上资料:http://www.cnblogs.com/zhang...

          递归算法的思想:将复杂的问题分成同类的几个小问题,通过自身算法调用自身算法,来实现复杂问题简单化。1、递归算法代码简洁;2、递归算法是逆向思维;3、递归算法是复杂问题简单化;4、算法过程抽象,用户难以跟踪迭代细节。

          经典例子:汉诺塔问题,解决这类问题,关键是抓住问题的入口和出口。

          递归算法网上资料:http://www.cnblogs.com/zhangqqqf/archive/2008/09/12/1289730.html

    www.cut-the-knot.com/recurrence/hanoi.html

     

    展开全文
  • 我们将以两个经典问题为例子,升级我们的递归成为尾递归。尾递归顾名思义就是尾处递归,其实不然。就我的理解,就是将递归函数多加了几个参数,并将结果保存在参数中,这就略去了函数回调的代价。以往我们求斐波那契...
  • 递归与分治法经典例子

    千次阅读 2019-06-23 15:06:44
    文章目录关于算法递归与分治法基本概念递归经典例子hanoi塔分治法经典例子整数排列(全排列问题)*整数划分*二分搜索*大数乘法棋盘覆盖合并排序、归并排序循环赛程表最接近点对 关于算法 问题1:算法基本概念/...
  • 其实递归和循环很像,都是重复地去做某件事,循环可以写成递归,但递归不一定能写成循环,因为终止递归的条件需要找到,是一个充分不必要条件。 递归的条件 1.递归的终止条件(也就是什么时候达到某一个条件可以结束...
  • 算法--递归

    2020-06-10 07:05:43
    递归算法经典例子 阶乘 汉诺塔 斐波那契数列 递归算法的执行过程 递归体&递归边界&斐波那契数列算法 以斐波那契数列为例: f(n)=0,n=0; f(n)=1,n=1; f(n)=f(n-1)+f(n-2),n=n; 第1,2个f(n)就是递归边界...
  • 之前的文章咱们已经聊过了「 数组链表 」、「 堆栈 」「 队列 」,今天咱们来看看「 递归 」,当然「 递归 」并不是一种数据结构,它是很多算法都使用的一种编程方法。它太普遍了,并且用它来解决问题非常的优雅...
  • 一个递归算法经典案例——汉诺塔问题 汉诺塔(又称:河内塔)是根据一个传说形成的数学问题: 有三根杆子A,B,C。A杆上有 N 个 (N>1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规> > 则将所有.....
  • 但是本文想说的是java实现一个递归算法的时候尽量不要用递归实现,而是转换成的非递归实现。 最近在实现一个比较复杂算法的时候,尝试了一下,非递归实现相比递归实现速度上能提升1/3。 以下面一个简单的例子...
  • 但是本文想说的是java实现一个递归算法的时候尽量不要用递归实现,而是转换成的非递归实现。 最近在实现一个比较复杂算法的时候,尝试了一下,非递归实现相比递归实现速度上能提升1/3。 以下面一个简单的例子来说...
  • 但是本文想说的是java实现一个递归算法的时候尽量不要用递归实现,而是转换成的非递归实现 。 最近在实现一个比较复杂算法的时候,尝试了一下,非递归实现相比递归实现速度上能提升1/3 。 以下面一个简单的例子...
  • 递归算法稍微复杂,不易理解,以看懂经典算法为目标,不要求自己创造发明, 递归包括自己调用自己自己调用别人调用自己,对计算机来说是一样的,但是对人来说挺难理解。 笔记如下: 专题 递归 定义: 一个...
  • 理解递归

    2017-04-10 18:18:00
    递归不能称得上是一种算法,而是一种符合人解题逻辑的编程技巧。 比较经典的问题比如汉诺塔、斐波那契数、上楼梯问题等。 怎么理解递归 首先明确他普通的函数调用没有什么不同,只是递归一般不是立刻可以得到...
  • 今天我班的大神心血来潮,居然找了本算法的书看起来了,里面有很多经典例子,大神在编程方面是一张白纸,所以看到讲解递归的部分时就傻了眼,比如书上讲解求Fibonacci数列时就用的是递归算法,相当的简洁明了,...
  • 1.介绍 普通的程序员使用迭代,天才程序员使用递归。什么是递归?下面这个图很形象地表现了...①一个很经典例子是用递归实现斐波拉契数列,第一项第二项为1,后面的使用以下递推式来求取。 其实现代码如下 ...
  • 递归算法就是方法自身直接或者间接地调用到了自身,它是一种写起来很简单,但理解起来不那么简单的算法。 一个功能在被重复地调用,并且运算的结果上一次的调用有关, 这种时候,可以使用递归。 * 注意: * 1....
  • 但是本文想说的是java实现一个递归算法的时候尽量不要用递归实现,而是转换成的非递归实现。 最近在实现一个比较复杂算法的时候,尝试了一下,非递归实现相比递归实现速度上能提升1/3。 以下面一个简单的例子...
  • 在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,现在我从算法的角度,利用递归和递归两种方式...
  • 递归 」一文读懂

    2019-09-22 23:12:24
    之前的文章咱们已经聊过了「数组链表」、「堆栈」「队列」,今天咱们来看看「 递归 」,当然「 递归 」并不是一种数据结构,它是很多算法都使用的一种编程方法。它太普遍了,并且用它来解决问题非常的优雅,但它...
  • 递归的巧妙应用可谓妙不可言,也是大大增加了程序结局问题的能力。...那我今天就结合今日所学与算法导论中的内容对递归进行一下经典案例展示。 递归的概述: 方法的递归调用: 1.基于方法可以自己调用
  • 《数据结构与算法分析:Java语言描述(第2版)》是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。...
  • 主讲赵宏庆; 第三章 关联规则挖掘理论和算法;第三章 关联规则挖掘理论和算法;3.1 基本概念与解决方法;支持度与频繁项目集 ;支持度与频繁项目集 ;可信度与关联规则;关联规则挖掘基本过程;...算法-递归测试一个频
  • c语言经典源码例子100篇

    热门讨论 2008-09-23 12:13:17
    实例30 函数的递归调用 实例31 局部全局变量 实例32 变量的存储类别 实例33 内部外部函数 实例34 综合实例1 实例35 综合实例2 实例36 变量的指针 实例37 一维数组指针 实例38 二维数组指针 实例39 字符串指针 ...
  • 回溯法是比枚举法更加高效的一种算法思想,直接枚举法的优点是思路程序都很简单,缺点在于无法简便地减小枚举量——必须生成所有可能的解,然后一一检查。在递归构造中,生成检查过程可以有机的结合起来,从而...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 168
精华内容 67
关键字:

递归算法和经典递归例子