004—JAVA递归知识精华总结

本文深入探讨了递归的概念,包括直接递归和间接递归,并通过计算自然数之和、阶乘、斐波那契数列以及猴子吃桃子问题等实例,详细解析了递归的使用方法。同时,强调了递归需注意的无限递归和栈内存溢出问题,并给出了求解台阶问题和阶乘问题的递归解决方案。
摘要由CSDN通过智能技术生成

递归

  • 递归:指在当前方法内调用自己的这种现象。

  • 递归的分类:递归分为两种,直接递归和间接递归。

    • 直接递归称为方法自身调用自己。

    • 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。

  • 注意事项:

    • 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。(无穷递归,类似死循环)

    • 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存

代码写法规律总结

if (填写终止递归的值即哪个值为出口){
    return 1;
}

return  规律;

 实例展示

示例一:计算1-100之间所有自然数的和
分析  求1-100的和   即100 + sum(99) + sum(98)
                   即num + sum(num--);
                     
规律假设该方法就是digui(n) 如果n=5  则digui(5) = 5(对应于n) + digui(4)(5对应于n-1) 
digui(4) = 3 + digui(3)


public static int sum(int num){
        if (num == 1){
            return 1;
        }
        return num + sum(num - 1);
    }

 

 

写一个方法用递归求阶乘
public class RecurtionMutiple {
    public static void main(String[] args) {
        int multiple = multiple(5);
        System.out.println("multiple = " + multiple);
    }
    public static int multiple(int n){
        if (n == 1){
            return 1;
        }
        return n * multiple(n - 1);

    }
}

 

示例三:计算斐波那契数列(Fibonacci)的第n个值
/*
    规律 feiBo(num - 1) + feiBo(num - 2);

*/
 public static void main(String[] args) {
        int i = feiBo(8);
        System.out.println("i = " + i);
    }


    public static int feiBo(int num){
        if (num == 1){
            return 1;
        }
        if (num == 2){
            return 1;

        }

        return feiBo(num - 1) + feiBo(num - 2);
    }

 

 描述:猴子吃桃子问题,猴子第一天摘下若干个桃子,当即吃了所有桃子的一半,还不过瘾,又多吃了一个。第二天又将仅剩下的桃子吃掉了一半,又多吃了一个。以后每天都吃了前一天剩下的一半多一个。到第十天,只剩下一个桃子。试求第一天共摘了多少桃子?

 

public class EatPeach {
    public static void main(String[] args) {
        int i = eatPeach(1);
        System.out.println("i = " + i);
    }

    public static int eatPeach(int day){
        if (day == 10){
            return  1;
        }
        return (eatPeach(day + 1) + 1)*2;
    }
}

 有n级台阶,一次只能上1步或2步,共有多少种走法?

求n级台阶,digui(n) 则之需求digui(4) + digui(3)

digui(1) = 1

digui(2) = 2

 

public class Step {
    public static void main(String[] args) {
        int digui = digui(4);
        System.out.println("digui = " + digui);

    }
    public static int digui(int n){
        if (n == 1){
            return 1;
        }
        if (n == 2){
            return 2;
        }
        return digui(n - 1) + digui(n - 2);
    }
}

求1+2!+3!+4!+...+20!的和

public class JieCheng {
    public static void main(String[] args) {
        int jiecheng = jiechengSum(4);
        System.out.println("jiecheng = " + jiecheng);
    }

    public static int jiecheng(int n){
            if (n == 1){
                return 1 ;
            }
            return   n * jiecheng(n - 1);
    }
    public static int jiechengSum(int n){
        if (n == 1){
            return 1;
        }
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += jiecheng(i);
        }
          return sum;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值