b站 蓝桥杯基础视频 递归与循环

https://www.bilibili.com/video/av31536424?from=search&seid=2297205686700288470

递归与循环

b站 蓝桥杯基础视频 递归与循环
b站 蓝桥杯基础视频 递归与循环

递归 本质 main()—f()—[大中华总裁做一部分工作]+[区域经理做一部分工作]

[区域经理] == [省级代理]…

求 打印输出 从a----b,


import java.io.IOException;
import java.util.Scanner;

public class one {	
	
	public static void main(String[] args)throws IOException{
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		f1(n);
	}
	
	//public static void main(String[] args){
		//f1(9);
		//f2(3,9);		
	//}
	public static void f1(int end){
		if(end==-1)return;
		//if(end>=0)
			System.out.println(end);
		//else return;
		f1(end-1);
	}
	public static void f2(int begin,int end){
		if(begin>end)return;
		System.out.println(begin);
		f2(begin+1,end);
	}
}

输出 数组内,几个数 相加的和

(1)求 数组a中,从数组下标begin开始到下标end结束,所有数值的和,扩展肯定也可以求积

b站 蓝桥杯基础视频 递归与循环

思路是 a(begin) + [a(begin-1)+…]


import java.io.IOException;
import java.util.Scanner;

public class one {

	public static void main(String[] args)throws IOException {
		// TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        //int n = Integer.parseInt(scanner.nextLine());
        int n = scanner.nextInt();
        int [] a = new int [n];
        for (int i = 0; i < a.length; i++) {
			a[i]=scanner.nextInt();
		}
        int begin = scanner.nextInt();
        int end = scanner.nextInt()+1;
        System.out.println(f(a,begin,end));
	}
    //求 数组a中,从数组下标begin开始到下标end结束,所有数值的和,扩展肯定也可以求积
	public static int f(int [] a,int begin,int end) {
		if(begin==end)return 0;
		//踢皮球
		int x=f(a,begin+1,end);
		return a[begin]+x;
	}
}

思路是 a(end) + [a(end-1)+…]


import java.io.IOException;
import java.util.Scanner;

public class one {

	public static void main(String[] args)throws IOException {
		// TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        //int n = Integer.parseInt(scanner.nextLine());
        int n = scanner.nextInt();
        int [] a = new int [n];
        for (int i = 0; i < a.length; i++) {
			a[i]=scanner.nextInt();
		}
        int begin = scanner.nextInt();
        int end = scanner.nextInt();
        System.out.println(f(a,begin,end));
	}
    //求 数组a中,从数组下标end开始到下标begin结束,所有数值的和,扩展肯定也可以求积
	public static int f(int [] a,int begin,int end) {
		if(end==begin)return 0;
		//踢皮球
		int x=f(a,begin,end-1);
		return a[end]+x;
	}
}

折半求和


import java.io.IOException;
import java.util.Scanner;

import javax.sound.midi.MidiChannel;

public class one {

	public static void main(String[] args)throws IOException {
		// TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        //int n = Integer.parseInt(scanner.nextLine());
        int n = scanner.nextInt();
        int [] a = new int [n];
        for (int i = 0; i < a.length; i++) {
			a[i]=scanner.nextInt();
		}
        int begin = scanner.nextInt();
        int end = scanner.nextInt();
        int mid = (begin+end)/2;
        System.out.println(f(a,begin,mid)+f(a,mid,end));
	}
    //求 数组a中,从数组下标begin开始到下标end结束,所有数值的和,扩展肯定也可以求积
	public static int f(int [] a,int begin,int end) {
		if(begin==end)return 0;
		//踢皮球
		int x=f(a,begin+1,end);
		return a[begin]+x;
	}
}

判断两个字符串,是否相同。

b站 蓝桥杯基础视频 递归与循环

1.equals

eauals与“==”区别 https://www.cnblogs.com/bluestorm/archive/2012/03/02/2377615.html


import java.io.IOException;
import java.util.Scanner;

public class one {

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		//Scanner scanner = new Scanner(System.in);
        System.out.println(isSameString("abc", "abc"));
	}
	public static boolean isSameString(String s1,String s2) {
		return s1.equals(s2);
	}
}

(2)方法

      substring(x)是从字符串的的第x个字符截取

      substring(x,y)是从x到y前的位置停止

(1)每次都判断 s1.length是否等于 s2.length.运用substring(1),重新截取数组,从第一个字符截取,即不包含第一个。两个数组同时都变为空,为true,但是因为 每次都判断 s1.length是否等于s2.length,所以 只需要 判断s1.length是否等于 0,等于0即为true. 不等于0,继续下边的判断


import java.io.IOException;
import java.util.Scanner;

public class one {

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		//Scanner scanner = new Scanner(System.in);
        System.out.println(f1("abc", "abc"));
	}
	public static boolean f1(String s1,String s2) {
		if (s1.length() != s2.length()) return false;
		if (s1.length()==0) {
			return true;
		}
		if (s1.charAt(0)!=s2.charAt(0)) return false;
		return f1(s1.substring(1), s2.substring(1));
	}
}

(3)方法

(1)不每次都判断s1.length是否等于s2.length.运用substring(1),重新截取数组,从第一个字符截取,即不包含第一个。取一个数组变空,另外一个不变空,即为false. 两个数组同时都变为空,为true


import java.io.IOException;
import java.util.Scanner;

public class one {

	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		//Scanner scanner = new Scanner(System.in);
        System.out.println(f1("abc", "abcd"));
	}
	public static boolean f1(String s1,String s2) {
		if (s1.length()==0 && s2.length()==0) {
			return true;
		}
		else if (s1.length()==0 && s2.length()!=0) {
			return false;
		}
		else if (s1.length()!=0 && s2.length()==0) {
			return false;
		}	
		if (s1.charAt(0)!=s2.charAt(0)) return false;
		return f1(s1.substring(1), s2.substring(1));
	}
}

b站 蓝桥杯基础视频 递归与循环
b站 蓝桥杯基础视频 递归与循环
b站 蓝桥杯基础视频 递归与循环