数据结构--递归的几个应用(求和,阶乘,汉诺塔)

定义
    一个函数自己调用自己
递归的条件    
        必须要有明确的终止条件
        所处理的数据规模在减少
        这个转化是可解的
应用

1.求阶乘

/**
 * 递归求阶乘
 * Created on 2018年9月10日<br>
 */
public class Factorial {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个整数:");
        Long nu = scanner.nextLong();
        Long result = func(nu);
        System.out.println("阶乘是:"+result);
        

    }
    static Long func(Long nu) {
        if (1 == nu)
            return nu;
        else
            return func(nu - 1) * nu;
    }
}

2 递归实现高斯算法

/**
 * 递归求1-100的和
 * Created on 2018年9月10日<br>
 */
public class Sum {
    public static void main(String[] args) {
        Long n =(long) 1000;
        System.out.println(func(n));
    }
    static Long func(Long n ){
        if (1==n)
            return (long) 1;
        else
            return  func(n-1)+n;
    }
}

3 .汉诺塔

public class Hanoitower {

    public static void main(String[] args) {
        String A = "A";
        String B = "B";
        String C = "C";
        func(3, A,B,C);
    }
    /**
     * @param n 圆盘个数
     * @param A 初始石棒
     * @param B 中间石棒
     * @param C 目标石棒
     */
    static  void func(int n,String A,String B,String C){
       if (1==n)
           //如果只有一个盘子,直接把A移到C
        System.out.println("把第"+n+"个盘子由"+A+"-"+C);
       else{
           //先借助C把n-1个元素放在B,然后把第n个元素放到C
           func(n-1, A, C, B);
           System.out.println("把第"+n+"个盘子由"+A+"-"+C);
           //B再借助A把n-1个元素放到C
           func(n-1, B, A,C );
       }
    }
}

猜你喜欢

转载自blog.csdn.net/stonennnn/article/details/82781772