几个经典的递归小程序

取球问题

 1 /*
 2  * 取球问题:
 3  * 从n个球中取出m个有多少种取法?
 4  */
 5
 6 public class Main {
 7
 8     public static void main(String[] args) {
 9         System.out.println(quQiu(10, 3));
10     }
11
12     static int quQiu(int n, int m) {
13         if (n < m) {
14             return 0;
15         }
16         if (n == m) {
17             return 1;
18         }
19         if (m == 0) {
20             return 1;
21         }
22         return quQiu(n - 1, m) + quQiu(n - 1, m - 1); // 弄一个特殊球,再分该球取不取两种情况
23     }
24
25 }

全排列问题

 1 /*
 2  * 全排列问题:
 3  * 求n个元素的全排列?
 4  */
 5
 6 public class Main {
 7
 8     public static void main(String[] args) {
 9         char[] a = "ABCDEFG".toCharArray();
10         paiLie(a, 0);
11     }
12
13     static void paiLie(char[] a, int index) {
14         if (index == a.length) {
15             System.out.println(a);
16         }
17         for (int i = index; i < a.length; i++) {
18             char temp = a[index];
19             a[index] = a[i];
20             a[i] = temp;
21
22             paiLie(a, i + 1);
23
24             temp = a[index]; // 回溯
25             a[index] = a[i];
26             a[i] = temp;
27         }
28     }
29
30 }

AB排列问题

 1 /*
 2  * 计算m个A,n个B可以组成多少排列?
 3  * 如:AABB,ABB......
 4  */
 5
 6 public class Main {
 7
 8     public static void main(String[] args) {
 9         System.out.println(paiLie(2, 1));
10     }
11
12     static int paiLie(int m,int n){
13         if(m==0||n==0){
14             return 1;
15         }
16         return paiLie(m-1, n)+paiLie(m, n-1);
17     }
18
19 }

最大子序列问题

/*
 * 最大子序列长度:
 * 求两个串的最大公共子序列长度?
 */

public class Main {

    public static void main(String[] args) {
        System.out.println(ziXuLieChangDu("abc", "xbacd"));
    }

    static int ziXuLieChangDu(String s1, String s2) {
        if (s1.length() <= 0 || s2.length() <= 0) {
            return 0;
        }
        if (s1.charAt(0) == s2.charAt(0)) { // 假设首位相等
            return 1 + ziXuLieChangDu(s1.substring(1), s2.substring(1));
        } else {
            return Math.max(ziXuLieChangDu(s1.substring(1), s2), ziXuLieChangDu(s1, s2.substring(1)));
        }
    }

}

整数分化问题

 1 /*
 2  * 整数分化问题:
 3  * 对于给定的正整数n,打印所有分化部分
 4  */
 5
 6 public class Main {
 7
 8     public static void main(String[] args) {
 9         int[] a = new int[6];
10         fenHua(6, a, 0);
11     }
12
13     static void fenHua(int n, int[] a, int index) {
14         if (n <= 0) {
15             for (int i = 0; i < index; i++) {
16                 System.out.print(a[i] + " ");
17             }
18             System.out.println();
19         }
20         for (int i = n; i > 0; i--) {
21             if (index > 0 && i > a[index - 1]) {        //先大后小
22                 continue;
23             }
24             a[index] = i;
25             fenHua(n - i, a, index + 1);
26         }
27     }
28
29 }
时间: 2024-10-01 02:48:48

几个经典的递归小程序的相关文章

经典递归小程序--汉诺塔

#include <stdio.h> /* 思路:1.将1到n-1号盘子借助C移到B上 2.将n号盘子移到C上 3.将1到n-1号盘子借助A移到C上 */ //初始化步数 int i = 0; void move(int,char,char); void hannuota(int,char,char,char); void main(void){ int n; printf("请输入汉诺塔盘子的个数:"); scanf("%d",&n); han

【转】java初学基础班经典练手小程序300例(飘叶寻梦整理)

一.函数1.*************************************************************************************************************************************编程题: 定义一个功能,完成对考试成绩的等级划分. 90~100 A 优秀 80~89 B 良好 70~79 C 中等 60~69 D 及格 60以下 E 不及格 class  Test04{ public static

递归小程序之求阶乘

1.题目描述 阶乘 n! = n * (n-1) * (n-2) * ...* 1(n>0) 2.代码实现 1 package com.wcy.october; 2 3 /** 4 * 时间:2016年10月23日 5 * 题目:(1)阶乘 n! = n * (n-1) * (n-2) * ...* 1(n>0) 6 */ 7 public class RecursionTest5 { 8 9 public static int getResult(int n){ 10 if (n == 1)

递归小程序之斐波那契数列

1.题目描述 一列数的规则如下: 1.1.2.3.5.8.13.21.34...... 求第30位数是多少, 用递归算法实现. 2.代码实现 1 package com.wcy.october; 2 3 /** 4 * 时间:2016年10月23日 5 * 题目:一列数的规则如下: 1.1.2.3.5.8.13.21.34...... 求第30位数是多少, 用递归算法实现. 6 */ 7 public class RecursionTest1 { 8 9 /** 10 * 用递归算法求解 11

小程序入门经典技巧

小程序入门经典技巧 1:小程序如何设置页面路径?2:小程序如何设置默认页面窗口表现?3:小程序如何设置底部tab表现?4:小程序如何设置网络超时时间?5:小程序如何进行数据绑定? 小程序如何设置页面路径? 小程序如何设置默认页面窗口表现? 小程序如何设置底部tab表现? 小程序如何设置网络超时时间? Q:小程序如何进行数据绑定? https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/data.html   Q:小

编程小课堂:10个经典的C语言小程序

今天给大家分享10个比较基础的C语言的小程序,希望给C语言初学者带来一定帮助. (IT之家配图) 1.题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去掉不满足条件的排列. 程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;

福利贴——爬取美女图片的Java爬虫小程序代码

自己做的一个Java爬虫小程序 废话不多说,先上图. 文件夹命名是用标签缩写,如果大家看得不顺眼可以等下载完成后手动改一下,比如像有强迫症的我一样... 这是挂了一个晚上下载的总大小,不过还有很多因为一些问题没有遍历下载到,而且会产生很多空文件,最下面我附带了一个递归删除空文件夹的小程序代码. 接下来是文件夹内部~ 图片存放位置默认为d:\picture,可在程序中更改,main函数的开头就是,有注释.爬取的网站为http://www.mmonly.cc/,大家有更好的资源网站可以私我. 爬虫源

官方问答--微信小程序常见FAQ (17.8.21-17.8.27)

给提问的开发者的建议:提问之前先查询 文档.通过社区右上角搜索搜索已经存在的问题. 写一个简明扼要的标题,并且正文描述清楚你的问题. 提交 BUG:需要带上基础库版本号,设备信息(iOS, Android,开发工具等等),操作系统信息(系统版本),以及可以让他人重现的信息,最好能够提供重现 demo. 对于提供信息过少的问题,会直接关闭,请提供完整信息以后重新打开问题.另外,对于如何做某某功能,可否做某某功能的问题,会直接关闭. 微信小程序常见FAQ(17.8.21-17.8.27) Q:1.5

小程序的红利期

其实一直都有人问我,小程序是否还有机会.我必须承认,一开始我就看错了,也许现在还是错的,不过没关系,跟大家分享一下,如果又错了,就继续攒经验值.对创业者而言,很多时候,做错总比错过有价值. 我最近常说的是,小程序的价值,在于寄生. 小程序自身的入口,只有一个,是附近的小程序.当然,这个入口也是有价值的,但不足以支撑腾讯关于小程序生态的野心. 那么其他的入口,全部是寄生关系. 我们来数一数. 1.公众号 以前公众号只可以绑定3个小程序,后来放开50个.我们注意到这段时间很多公众号都绑定了小程序,这