栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

004—JAVA递归知识精华总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

004—JAVA递归知识精华总结

递归

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

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

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

    • 间接递归可以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个值

 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;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/323286.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号