您的位置:首页 > 其它

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

2018-02-10 15:08 260 查看
递归算法在程序中不断反复调用自身的方法调用方式。此处的重点是调用自身
递归满足两个条件
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)   //填空
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息