查找与排序
递归
一、阶乘
public static int f(int i) {
if ( i == 1 )
return 1;
return i*f(i-1);
}
public static void main(String[] args) {
int num = 3;
int res = f(num);
System.out.println(res);
}
二、打印从 i 到 j
public static void f(int i, int j) {
if ( i > j) {
return;
}
System.out.println(i);
f(i+1,j);
}
public static void main(String[] args) {
int i = 1;
int j = 5;
f(i,j);
}
三、数组求和
一共有两种解法,都是用递归,但一种是正序递归,一种是倒序递归
//思路是:从小到大递归(正序)
public static int f(int arr[],int begin) {
if( arr.length-1 == begin )
return arr[begin];
return arr[begin]+f(arr,begin+1);
}
public static void main(String[] args) {
int [] list = {
1,2,3,4,5};//3
int res = f(list,0);
System.out.println(res);
}
//思路是:从大到小递归(倒序)
public static int f(int [] arr,int end) {
//end==4
if ( end == 0)
return arr[0];
return arr[end]+f(arr,end-1);
}
public static void main(String[] args) {
int [] list = {
1,2,3,4,5};//5
int res = f(list,list.length-1);
System.out.println(res);
}
四、翻转字符串
一共有两种解法,都是递归,一个是正序递归,一个是逆序递归,思路与上道题(数组求和)相似,只演示逆序递归
//逆序递归
public static String f(String str2,int len) {
//len==3
if ( len == 0 )
return str2.charAt(len)+"";
return str2.charAt(len)+f(str2,len-1);
}
public static void main(String[] args) {
String str1 = "abcd";//4
String res = f(str1,str1.length()-1);
System.out.println(res);
}