递归

递归,就是在运行的过程中调用自己。
构成递归需具备的条件:

  1. 子问题须与原始问题为同样的事,且更为简单;
  2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
    我在刚开始解决递归问题的时候,总是会去纠结这一层函数做了什么,它调用自身后的下一层函数又做了什么,把实现一个递归解法想的十分复杂。其实挺简单的,要跳出刚才这个思维误区,递归就是在运行的过程中调用自己。那么就是说它每一级的功能都是一样的,所以我们只需要关注一级递归的解决过程就可以了。
  3. 找整个递归的终止条件:递归应该在什么时候结束?
  4. 找返回值:应该给上一级返回什么信息?
  5. 本级递归应该做什么:在这一级递归中,应该完成什么任务?

递归的典型例子是数字的阶乘。
数字 N 的阶乘是 1 到 N 之间所有整数的乘积。
例如 3 的阶乘就是 1×2×3。
我们来以题目作为例子
问题:“假定一对大兔子每月能生一对小兔子,且每对新生的小兔子经过一个月可以长成一对大兔子,具备繁殖能力,如果不发生死亡,且每次均生下一雌一雄,问一年后共有多少对兔子?”
解决方法:

  1. 递归: 使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1。
    代码演示:
static int facts(int mon){
		if(mon<=2){
			return 1;
		}
		return facts(mon-2)+facts(mon-1);//
	}
public static void main(String[] args) {
		Scanner input = new Scanner(System.in);//输入
		System.out.println("请输入月份:");
		int mon = input.nextInt();
		System.out.println(mon+"月的兔子对数为"+facts(mon));
	}

2.for循环

public static void main(String[] args) {
		int r=1;
		for (int i = 1; i <= 10; i++) {
				System.out.println(r+"*"+i+"="+(i*r));
			r=r*i;
		}
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值