备战蓝桥杯------递归算法及经典例子

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

递归满足两个条件

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)   //填空

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值