一、递归和循环
1.理论上,任何循环都可以重写为递归形式
2.java不支持尾递归。
二、解决递归
1.问题相似性
2.递归出口。这里有时候可以通过添加参数来解决。
三、递归的原理
四、没写出口的时候,疯狂压栈,栈就会溢出。
循环、递归打印0-n
package cn.itcast.suanfa;
public class Test {
public static void fun1(int n){
if(n>0)
fun1(n-1);
/*
* 如果n=0,会调用n=-1,错误
* 如果n=1,会调用n= 0,正确
* 所以应该是n>0
* */
System.out.println(n);
}
public static void fun2(int begin, int end){
if(begin>end) return;//这个return可以运用为,结束条件后停止该函数
System.out.println(begin);
fun2(begin+1, end);
}
public static void main(String[] args) {
//方法一:递归打印0-n
// fun1(10);
//方法二:循环打印0-n
/*for (int i = 0; i < 10; i++) {
System.out.println(i);
}*/
//递归打印从begin到end
fun2(1,10);
}
}
递归打印数组之和
package cn.itcast.suanfa;
public class Test2 {
public static int addAll(int[] a){
/**
* 如果方法不是static,则必须通过新建对象后,用点.方法调用
* 如果方法 是static,则可以直接调用
*/
int sum = 0;
for (int i = 0; i < a.length; i++) {
sum+=a[i];
}
return sum;
}
//方法一:求arr数组,从begin到结束的元素和
public static int addAll2(int[] a, int begin){
if (begin == a.length)
return 0;
int sum = addAll2(a,begin + 1);
return sum + a[begin];
}
//方法二:求arr数组,从begin到end的元素和
public static int addAll3(int[] a, int begin, int end){
if (begin > end)
return 0;
int sum = addAll3(a,begin + 1, end);
return sum + a[begin];
}
public static void main(String[] args) {
int[] arr = {2,3,4,6};
//int sum = addAll(arr);
// int sum = addAll2(arr,1);
int sum = addAll3(arr,0,3);
System.out.println(sum);
}
}
判断两个字符串相等
package cn.itcast.suanfa;
/**
* 判断两个字符串时候相等
* 2020年1月17日11:27:36
*/
public class Test3 {
//方法一:运用java已经写好的
public static boolean isSameString(String s1, String s2){
return s1.equals(s2);
}
//方法法二:递归
/**
* 判断第一个长度是否相等、人为
* 判断第一个字符是否相等、人为
* 剩下的字符由递归判断
*/
public static boolean fun(String s1, String s2){
if (s1.length() != s2.length()) return false;
if (s1.length() == 0 /*&& s2.length() == 0*/) return true;//可以省略,因为第一句已经判断了
if (s1.charAt(0) != s2.charAt(0)) return false;
return fun(s1.substring(1),s2.substring(1));
//s1.substring(1),去掉字符串的第一个。
}
public static void main(String[] args) {
System.out.println(isSameString("abc","abcd"));
System.out.println(fun("abc","abc"));
}
}
来源:CSDN
作者:Mark_2222
链接:https://blog.csdn.net/qq_42788016/article/details/104016236