递归基础小练习

package 递归基础小题;

/**
 * @author 邓雪松 (づ ̄ 3 ̄)づ)
 * @create 2021-10-24-16-25
 */
public class Demo1 {
    public static void main(String[] args) {
        //求阶乘问题-递归
        int x1 = f1(5);
        System.out.println("5的阶乘为:"+x1);
        //打印1-6
        f2(1,6);
        //数组求和
        int x2 = f3(new int[]{1,2,3,4,5},0);
        System.out.println("\n数组之和为:"+x2);
        //反转字符串
        System.out.println(reverse("abcd",3));

    }
    /**
     * f1(n):求n的阶乘-->f1(n-1)求n-1的阶乘
     * 找重复:n*(n-1)的阶乘,求n-1的阶乘是原问题的重复(规模更小) —— 子问题
     * 找变化:变化的量(n)应该作为参数——※
     * 找边界:出口——return 1——※
     */
    static int f1(int n){
        if(n==1)
            return 1;
        return n * f1(n-1);
    }
    /**
     * 打印i-j(i到j)
     * 找重复:打印
     * 找变化:变化的量应该作为参数-i
     * 找边界:出口
     */
    static void f2(int i,int j){
        if(i>j)
            return;
        System.out.print(i+"\t");
        f2(i+1,j);
    }
    /**
     * 对arr的所有元素求和
     * 找重复:
     * 找变化:变化的量应该作为参数
     * 找边界:出口
     */
    static int f3(int[] arr,int begin){
        if(begin==arr.length-1){
            return arr[begin];
        }
        return arr[begin]+f3(arr,begin+1);
    }
    /**
     * 翻转字符串
     */
    static String reverse(String src,int end){
        if(end==0){
            return ""+src.charAt(0);
        }
        return src.charAt(end)+reverse(src,end-1);
    }
}

运行结果

5的阶乘为:120
1	2	3	4	5	6	
数组之和为:15
上一篇:第十二届蓝桥杯省赛大学B组 试题D货物摆放


下一篇:蓝桥杯递归算法