递归
在刚开始接触递归都会感叹他的复杂,开始依赖暴力枚举,但是你真正学会了递归,他会成为你的好帮手,并且思想方面也会有很大的提高
从本质上是将大的问题转化为更小的问题
例如:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少个桃子?
求递归问题
1:递归函数语义:求猴子第几天有几个桃子
2.递归终止条件:到第十天的时候猴子只有一个桃子
3.递归操作:计算方法
public static int moneypeach(int day){
//递归终止条件
if(day==10){
return 1;
}
//递归操作:判断方式
return (moneypeach(day+1)+1)*2;
}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入天数");
int day=input.nextInt();
System.out.println("猴子第"+day+"天有"+moneypeach(day)+"个桃子");
}
递归本身也是一个函数完成一个功能
链表是一个天然的递归结构
解决链表中删除的问题
// 使用递归删除头结点
public Node recursionRemove(Node node,T value){
//递归终止条件
if(node.data.equals(value)){
this.size--;
return node.next;
}
else{
node.next=recursionRemove(node.next,value);
}
return node;
}
快去练练题试试吧
![](https://img-blog.csdnimg.cn/direct/ec0bf6d0f71a4d1585f44eae5ed7fe7c.png)