蓝桥杯算法很美笔记—递归

递归

递归设计经验

—找重复(子问题)

—找重复中的变化量—>参数

—找参数的变化趋势—>设计出口

最基本递归
static void f(int i){
    if(i==0) return;
    f(i-1);//调用自身
}

1)问题分解为:直接量+小规模子问题

2)问题分解为:多个小规模子问题

一、切蛋糕思维

1.求阶乘

static void f1(int n){
    if(n==1) return 1;
    return n*f(n-1);
}

2.打印i—j

static void f21(int i,int j){
    System.out.println(i);
    if(i==j) return;
    f2(i+1,j);
}
static void f22(int i,int j){
    if(i>j) return;
    System.out.println(i);
    f2(i+1,j);
}

3.对arr的所有元素求和

static void f3(int[] arr,int i){
    if(i == arr.length-1) return arr[i];
    return arr[i]+f3(arr,i+1);
}

4.翻转字符串
翻转字符串图解

static String f4(String s,int end){
    if(end==0) return ""+s.charAt(0);
    return s.charAt(end)+f4(s,end-1);
}

二、递推公式或等价转换

5.斐波拉契数列

static int f5(int n){
    if(n==1||n==2) return 1;
    return f(n-1)+f(n-2);
}

6.最大公倍数—辗转相除法

static int gcd(int m,int n){
    if(n==0) return m;
    return gcd(n,m%n);
}

7.插入排序-从小到大

思路:对数组n-1到第一个数这部分排序,将第n个数插入到已经有序的部分

static void insertSort(int[] arr,int k){
    if(k==0) return;
    insertSort(arr,k-1);
    int x=arr[k];
    int index=k-1;
    while(index>-1&&x<arr[index]){
        arr[index+1]=arr[index];
        index--;
    }
    arr[index+1]=x;
}

8.二分查找的递归解法

static int binarySearch(int[] arr,int low,int high.int key){
    if(low>high) return -1;
    int mid=low+((high-low)>>1);
    int midVal=arr[mid];
    if(midVal<key) return binarySearch(arr,mid+1,high,key);
    else if(midVal>key) return binarySearch(arr,low,mid-1,key);
    else return mid;
}

如有侵权,立删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值