面向基础编程(三)方法递归调用

1.基本内容

定义:递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变得简洁

能够解决的问题:各种数学问题;能够使用栈解决的问题;算法中使用

eg:将一个数减到二,递归实现阶乘

public class recursion1 {
    public static void main(String[] args){
        T t = new T();
        t.test(5);
        int res = t.factorial(7);
        System.out.println("res = " + res);
    }
}
​
class T{
    public  void test(int n){
        if(n>1){
            test(n-1);
        }
        System.out.println("n = " + n);
    }
    public  int factorial(int n){
        if (n == 1) {
            return 1;
        } else {
            return factorial(n - 1) * n;
        }
    }
}
2.递归规则
  • 执行一个方法时,就创建一个新的受保护的独立空间(栈空间)

  • 方法的局部变量是独立的,不会互相影响

  • 如果方法中使用的是引用类型变量,就会共享该引用类型的数据

  • 递归必须向退出递归的方向移动,否则会出现无限递归(栈溢出)

  • 当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用就将结果返回给谁,同时当方法执行完毕或者返回时,该方法就执行完毕

3.递归实例

1.斐波那契数列

1.当 n = 1 斐波那契数 是 1
2. 当 n = 2 斐波那契数 是 1
3. 当 n >= 3 斐波那契数 是前两个数的和
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;
    }
}

2.猴子吃桃问题

猴子吃桃子问题:有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个!
以后每天猴子都吃其中的一半,然后再多吃一个。当到第 10 天时,
想再吃时(即还没吃),发现只有 1 个桃子了。问题:最初共多少个桃子?
规律就是 前一天的桃子 = (后一天的桃子 + 1) *2
public int peach(int day) {
    if(day == 10) {//第 10 天,只有 1 个桃
        return 1;
    } else if ( day >= 1 && day <=9 ) {
        return (peach(day + 1) + 1) * 2;
    } else {
        System.out.println("day 在 1-10");
        return -1;
    }
}
  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值