蓝桥杯于航1(递归问题)
1.用递归计算累加和。
在一般的情况下,可以用循环做的题目都可以用递归解决。
在不能解决的情况之下,往往是参数不足导致的,可以增加参数再去解。
1 public class Main { 2 public static int f(int[] a,int begin){ 3 if(begin==a.length) 4 return 0; 5 int x=f(a,begin+1); 6 return x+a[begin]; 7 } 8 public static void main(String[] args) { 9 int[] a={2,5,3,9,12,7}; 10 int sum=f(a,0); 11 System.out.println(sum); 12 13 } 14 }
2.判断两个字符串是否相等
1 public class Main { 2 public static boolean isSameString(String s1,String s2){ 3 if(s1.length()!=s2.length()) return false; 4 if(s1.length()==0) return true; 5 if(s1.charAt(0)!=s2.charAt(0)) return false; 6 return isSameString(s1.substring(1),s2.substring(1)); 7 } 8 public static void main(String[] args) { 9 System.out.println(isSameString("aBCDE","aBCDE")); 10 } 11 }
注:
a="cavaba";
a.substring(1); 指的是从下标1开始截取字串。
当a="a",a.substring(1)=""。
递归的原理解释:
public class Main { public static void f(int n){ if(n>0) f(n-1); System.out.println(n); } public static void main(String[] args) { f(5); } }
以上函数是打印0,1,2,3,4,5.
递归是一个栈结构,只有上面的执行完,才按照栈结构中的顺序执行后面的。以此类推。