java中的递归和重载以及递归和重载的案例

ackage twojava;

public class _yzq_dg {

//递归
//方法内部调用自身的过程
//1.求前n项和
//2.求阶乘你!=n*(n-1)*(n-2)*(n-3)..........1
//斐波那契数列   1 1 2 3 4 5  8 13 21  第n项是?
//求前n项和请使用递归运算

// public static int Sum(int n) {
// int sum=0;
// for(int i=1;i<=n;i++) {
// sum+=i;
//
//
// }
// return sum;
//}
public static void main(String[]args) {
Sum(5);
System.out.println(Buy(20,3,5));
}
//求前n项和 使用递归 5+4+2+1(每次加的值是当前值减一)

public static int Sum(int n) {
	if(n==1) {
		return 1;//1的时候返回一个1
	}
	return n+Sum(n-1);//StackOverflowError 栈溢出错误
	//5+Sum(5-1)
	//5+4+Sum(4-1)
	//5+4+3+Sum(3-1)
	//5+4+3+2+Sum(1)    当加到1的时候结束了    结束相当于程序的出口
	//连续调用自己(死循环) 这里的死循环 和for里的死循环不一样
	//for的死循环是一只在执行数据
	//这里的死循环是在main函数里边执行了的       每调用一个方法会在线程里边开一个栈帧(栈帧是占内存的用不了一会就占满了)
	//栈比较小
	//1.找到出口
	//2.找规律
	//将问题转移给缩小范围的子问题
}
//7.你拥有A块钱,一瓶水B块钱,每瓶水可以得到一个瓶盖,每c个瓶盖可以换一瓶水
//请写出函数求解上面题目,上面题目ABC为参数
//100  3  5个瓶盖换一瓶水   最终可以买到多少瓶水
//1.找出口(a/b(最开始瓶盖的数量)当瓶盖的数量<瓶盖单价(瓶盖可以换水的数量)
//d<c
//2.找规律   上一次数据和下一的关系   瓶盖的数量
//上一次瓶盖的数量    下一次瓶盖的数量
//d=a/b(100/3)获得瓶盖的数量以后用的话是               d%c+d/c(换完水之后得到新的瓶盖)





//买水
public static int Buy(int a,int b, int c) {
	return a/b+ForCup(a/b,c);
	//a/b第一次用钱买完水得到的瓶盖
}

public static int ForCup(int d ,int c) {
	if(d<c) {
		return 0;
	}else {
		return d/c+ForCup(d%c+d/c,c);
	}
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值