0
点赞
收藏
分享

微信扫一扫

递归的实例-Java


递归实例

/**
* 对递归进行训练
*
* @author Clearlight
*
*/
public class _07_递归 {

public static void main(String[] args) {
System.out.println(f1(3)); // n的阶乘
System.out.println(f2(new int[] {1,1,2,3,4},0)); // 对arr的所有元素求和,从头开始
System.out.println(f21(new int[] {1,1,2,3,4},4)); // 对arr的所有元素求和,从尾开始
System.out.println(f3("abcde",4)); // 翻转字符串
System.out.println(f4(6)); // 斐波那契数列
System.out.println(f5("aaab","aaa")); // 比较两个字符串是否相等
}

/**
* 需求:递归求解阶乘
*
* 思路:
* f(n):求n的阶乘-->f(n-1)求n-1的阶乘
* 找重复:n*(n-1)的阶乘,求n-1的阶乘是原问题的重复(规模更小)-子问题
* 找变化:变化的量应该作为参数
* 找边界:出口
*
* @param n 开始的数
* @return 返回结果
*/
static int f1(int n) {
if (n == 0) {
return 1;
}
return n * f(n - 1);
}

/**
* 需求: 对arr的所有元素求和,a[begin] + (begin+1...结束)
*
* @param arr
* @param begin
* @return
*/
static int f2(int[] arr, int begin) {
if(begin == arr.length-1) {
return arr[begin];
}
// 类似踢皮球
return arr[begin] + f2(arr,begin+1);
}

/**
* 需求: 对arr的所有元素求和,a[end-1...0) + a[end]
*
* @param arr
* @param end
* @return
*/
static int f21(int[] arr, int end) {
if(end == 0) {
return arr[0];
}
return arr[end] + f2(arr, end-1);
}


/**
* 需求: 翻转字符串
*
* @param src
* @param end
* @return
*/
static String f3(String src, int end) {
if(end == 0) {
return "" + src.charAt(0);
}
return src.charAt(end) + f3(src, end-1);
}


/**
* 需求: 求斐波那契数列
*
* @param n 第n个位置
* @return 返回第n个位置的值
*/
static int f4(int n) {
if(n==1||n==2) {
return 1;
}
return f4(n-1) + f4(n-2);
}

/**
* 需求 : 比较两个字符串是否相等
*
* @param s1
* @param s2
* @return
*/
public static boolean f5(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 f5(s1.substring(1),s2.substring(1));
}
}

/*
输出:
6
11
11
edcba
8
false
*/

其他递归例题

​​算法训练-最小公倍数-Java(递归实现)​​算法训练-递归求二项式系数值-Java


举报

相关推荐

0 条评论