经典的递归-java



1.阶乘

嗯,这个就是 高中还是初中学的,比如4的阶乘 4!=1x2x3x4 ,那么也就是说自己调用自己的方法,一直乘n-1一直到n=2为止。


//1.阶层
public class factorial{

    public static int def(int n){
        if(n>0){
            if(n==1){
                return n;
            }else{
                return def(n-1)*n;
            }
        }
    }

    public static void main (String [] args){
        def(10)
    }

}


2.fibonacii

a1=1,a2=1,a3=2,a4=3...也就是说an = a(n-1) +a(n-2),  输入n(数字的位置),要知道这个数字是多少,同理。用方法,只有第一位和第二位返回1其余都返回f(n-1)+f(n-2)即可。

然后f(n-1)再调用递归方法成为f(n-2)+f(n-3),直到f里的参数为1或者2停止,全部展开之后就成为多个f(1)和f(2)的和。

public class fibonacii{
    public static void main(String []args){
        fib(20)
    }
    public static int fib(int n){
        if(n==1 || n==2){
            return 1;
        }else{
            return fib(n-1)+fib(n-2);
        }
    }
}


3.递归访问所有文件

嗯 如题

public class RecursiveFileDemo {
    public static void main(String[] args) {
        getFile(new File("D://一堆奇怪的东西"));
    }

    public static void getFile(File file) {
        File[] filelist = file.listFiles();

        for (int i = 0; i < filelist.length; i++) {
            if (filelist[i].isDirectory()) {
                getFile(filelist[i]);
            } else {
                System.out.println(filelist[i].getPath());
            }
        }
    }
}

4、排列组合的两种递归方式,参考蓝桥杯教程

package com.suanfa;

import java.util.Arrays;
import java.util.List;
import java.util.Vector;

public class Pailiezuhe {
     // 思路:穷举每个字符都在整个串或者递归都串排第一个
    public static List f1(String str){
        List<String> list = new Vector();
        if(str.length() ==1){
            list.add(str);
            return list;
        }
        for(int i=0;i<str.length();i++){
            char ch = str.charAt(i);
           List t = f1(str.substring(0,i)+str.substring(i+1));
           for (int k=0;k<t.size();k++){
               list.add(""+ch+t.get(k));
           }

        }
           return list;
    }

    /**
     * 每个字符都与后面所有字符交换位置
     * @param aa 待排数据
     * @param k 当前位置
     */
    public static void f2(char[] aa,int k){
        if(k==aa.length-1){
            System.out.println(String.valueOf(aa));
            return;
        }
        for(int i=k;i<aa.length;i++){
            {
                char t = aa[k];
                aa[k] = aa[i];
                aa[i] = t;
            }
            f2(aa,k+1);
            {
                char t= aa[k];
                aa[k] = aa[i];
                aa[i] = t;
            }
        }
    }

    public static void main(String[] args) {
        List l = f1("ABC");
        System.out.println(Arrays.toString(l.toArray()));
        char[] aa = {'A','B','C'};
        f2(aa,0);

    }
}
 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值