什么是递归
递归,就是在运行的过程中不断地调用自己。递归有两个过程,简单地说一个是递的过程,一个是归的过程。
递归
递归调用的重要规则
斐波那切数列
斐波那切数列:1,1,2,3,5,8,13 ··· 。给你一个整数 n
思路分析
1, 当 n = 1 时,斐波那切数 是 1
2. 当 n = 2 时,斐波那契数 是 1
3. 当 n >= 3 时,斐波那契数 是前两个数的和
4. 这里就是一个递归的思路
public class Main {
public static void main(String[] args) {
T t1 = new T();
int n = 7;
int res = t1.fibonacci(n);
if(res != -1){
System.out.println("当 n=" + n + "对应的斐波那切数=" + res);
}
}
}
public class T {
public int fibonacci(int n){
if (n >= 1) {
if (n == 1 || n == 2) {
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
} else {
System.out.println("要求输入的 n >= 1 的整数");
return -1;
}
}
}
猴子吃桃
有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个,以后每天猴子都吃其中的一半,然后再多吃一个。当到第十天时,再想吃时(还没有吃),发现只有一个桃子了。问:最初共有多少个桃子?
思路:逆推
- day = 10 时 , 有 1 个桃子
- day = 9 时 , 有 (day10 + 1)* 2 = 4 个桃子
- day = 8 时 , 有 (day9 + 1)* 2 = 10 个桃子
规律:前一天的桃子数 = (后一天的桃子数 + 1)* 2
可以使用递归进行处理
代码
package Recursion;
public class Hzct {
public static void main(String[] args) {
Hzct t = new Hzct();
int day = 1;
int peachNum = t.peach(day);
if (peachNum != -1) {
System.out.println("第" + day + "天有" + peachNum + "个桃子");
}
}
public int peach(int day) {
if (day == 10) {
return 1;
} else if (day >= 1 && day <= 9) {
return (peach(day + 1) + 1) * 2;
} else {
System.out.println("输入正确的天数:1——10");
return -1;
}
}
}