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