递归基础练习1

一.求n的阶乘

1.找重复:n*(n-1)!,求(n-1)!是原问题的重复(规模更小)——子问题。

2.找变化:重复中变化的量应该作为参数。

3.找边界:递归的出口。

public class 求N的阶乘 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
       System.out.println(fun(3));
	}
    
	public static int fun(int n) {
		if(n==1) {
			return 1;
		}
		return n*fun(n-1);
	}
}

二.打印i-j

public class 打印i到j {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        fun(1,10);
	}
    //找重复:打印i+1到j是一个子问题
	//找变化:重复中变化的量是i,所以i要作为参数
	//找边界:出口就是i>j
	public static void fun(int i,int j) {
		if(i>j) {
			return;
		}
		System.out.println(i);
		fun(i+1,j);
	}
}

三.对数组的所有元素求和

public class 对数组的所有元素求和 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int res = sum(new int[] {1,2,3,4,5},0);
         System.out.println(res);
	}
    //找重复:假设这个数组的长度是n,子问题就是求后面n-1个元素的和
	//找变化:这里重复中变化的变量是数组的起始位置
	//找边界:数组的起始位置等于数组的最大下标了
	public static int sum(int[] arr,int begin) {
		if(begin==arr.length-1) {
			return arr[begin];
		}
		return arr[begin]+sum(arr,begin+1);
	}
}

四.字符串的翻转

public class 字符串的翻转 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        System.out.println(reverse("abcd",3));
	}
    //找重复:"abcd"的翻转的子问题就是"abc"的翻转
	//找变化:这里就是end的变化即要翻转的字符串的变化
	//找边界:end等于0的时候即到达最后一个字符
	public static String reverse(String str,int end) {
		if(end == 0) {
			return str.charAt(end)+"";
		}
		return str.charAt(end)+reverse(str,end-1);
	}
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值