递归的常见几个案例:阶乘,斐波那契数列

递归

一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

构成递归需具备的条件:

  1. 子问题须与原始问题为同样的事,且更为简单;
  2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

递归求阶乘


	public static int factorial(int n) {
		if(n>0){
			if (n==1) {
			return 1;
			}
			if (n>1) {
				/*
					n*(n-1)*((n-1)-1)*...*1
				*/
				return n*factorial(n-1);
			}

		}
		return -1;

	}
	

分析:
当求1的阶乘,即n=1时,返回一个1
当n=2时,返回21
当n=3时,返回3
21
当n=4时,返回4
321

当n=n时,返回n*(n-1)((n-1)-1)…*1 (直到n=1)

递归求斐波那契数列

斐波那契数列:1 1 2 3 5 8 13 21 34…
不难发现规律是,前两个数为1,后面的每一个数为它的前两位数之和

	public static int fibonacci(int n) {
		if (n>0) {
			if (n==1||n==2) {
				return 1;
			}else{
				return fibonacci(n-1)+fibonacci(n-2);
			}
		}else{
			return -1;
		}
	}

可以尝试写汉诺塔练习递归,因为它相比这两个小白比较难理解,我准备单独写一个帖子对它进行一个较为详细的描述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值