欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的遞歸方法示例介紹

 更新時(shí)間:2021年12月27日 08:57:29   作者:liangzai2048  
大家好,本篇文章主要講的是Java中的遞歸方法示例介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽

遞歸

方法定義本身調(diào)用方法本身的現(xiàn)象叫做遞歸

在這之前我們學(xué)的東西:例如StringBuffer.append().append().append()這個(gè)不叫遞歸。這個(gè)叫方法的連續(xù)調(diào)用Math.max(Math.max(a,b),c)也不是遞歸,那這些是什么呢?這些是方法的調(diào)用。

那什么是遞歸呢?

舉例:

從前有座山,山里有座廟,廟里有個(gè)老和尚,老和尚在給小和尚說故事,說的故事內(nèi)容是:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

從前有座山,山里有座廟,廟里有個(gè)老和尚,老和尚在給小和尚說故事,說的故事內(nèi)容是:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

從前有座山,山里有座廟,廟里有個(gè)老和尚,老和尚在給小和尚說故事,說的故事內(nèi)容是:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

從前有座山,山里有座廟,廟里有個(gè)老和尚,老和尚在給小和尚說故事,說的故事內(nèi)容是:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。。。廟不在了,遞歸結(jié)束。

舉例:

學(xué)習(xí)-高新就業(yè)-娶媳婦-生娃-學(xué)習(xí)-高薪就業(yè)-娶媳婦-生娃-學(xué)習(xí)-高新就業(yè)-娶媳婦-生娃-學(xué)習(xí)-高薪就業(yè)-娶媳婦-生娃-學(xué)習(xí)-高新就業(yè)-娶媳婦-生娃-學(xué)習(xí)-高薪就業(yè)-娶媳婦-生娃-學(xué)習(xí)-高新就業(yè)-娶媳婦-生娃-學(xué)習(xí)-高薪就業(yè)-娶媳婦-生娃-學(xué)習(xí)-高新就業(yè)-娶媳婦-生娃-學(xué)習(xí)-高薪就業(yè)-娶媳婦-生娃

娶不到媳婦,生不了娃,遞歸結(jié)束。

遞歸的注意事項(xiàng):

遞歸一定要有一個(gè)出口,結(jié)束條件,否則就是死循環(huán)遞歸的次數(shù)不能太多,否則就會(huì)發(fā)生內(nèi)存溢出構(gòu)造方法不能使用遞歸

案例一

參考代碼:

public class RecursionDemo1 {
    public static void main(String[] args) {
        show(10);
    }
 
    private static void show(int i) {
        //定義結(jié)束條件
        if (i<0){
            System.out.println("結(jié)束循環(huán)");
        }else {
            System.out.print(i + "\t");
            show(--i);
        }
    }
 
}

輸出結(jié)果:

?10?? ?9?? ?8?? ?7?? ?6?? ?5?? ?4?? ?3?? ?2?? ?1?? ?0?? ?結(jié)束循環(huán)

遞歸求階乘

5的階乘:

? ? ? ? 遞歸求階乘:

? ? ? ? ? ? 5!= 5*4*3*2*1 = 120

? ? ? ? ? ? ? ?= 5*4!

? ? ? ? ? ? ? ?= 5*4*3!

? ? ? ? ? ? ? ?= 5*4*3*2!

? ? ? ? ? ? ? ?= 5*4*3*2*1!

不使用遞歸實(shí)現(xiàn)階乘

參考代碼:

/*
        遞歸求階乘:
            5!= 5*4*3*2*1 = 120
               = 5*4!
               = 5*4*3!
               = 5*4*3*2!
               = 5*4*3*2*1!
 */
public class RecursionDemo2 {
    public static void main(String[] args) {
        //不使用遞歸的做法
        int result = 1;
        for (int i = 2; i<=5; i++){
            result = result * i;
        }
        System.out.println("5的階乘是:" + result);
    }
}

?輸出結(jié)果:

5的階乘是:120

使用遞歸實(shí)現(xiàn)階乘

遞歸的實(shí)現(xiàn)思想:
1、結(jié)束條件:
if(i==1){return 1}

??? 2、尋找規(guī)律:
if(i!=1){
return i * recursionFun(i-1);
}

參考代碼:

/*
        遞歸求階乘:
            5!= 5*4*3*2*1 = 120
               = 5*4!
               = 5*4*3!
               = 5*4*3*2!
               = 5*4*3*2*1!
 */
public class RecursionDemo3 {
    public static void main(String[] args) {
 
        System.out.println(recursionFun(5));
 
    }
 
    private static int recursionFun(int i) {
 
        if (i==1){
            return 1;
        }else {
            //5 * recursionFun(4)
            //5 * 4 * recursionFun(3)
            //5 * 4 * 3 * recursionFun(2)
            //5 * 4 * 3 * 2 * recursionFun(1)
            //5 * 4 * 3 * 2 * 1
            return i * recursionFun(i-1);
        }
    }
}

輸出結(jié)果:

120

澳大利亞不死神兔(斐波那契數(shù)列)

有一對(duì)兔子,從出生第三個(gè)月開始,每個(gè)月都生一對(duì)兔子, 小兔子長(zhǎng)到三個(gè)月后每個(gè)月又生一對(duì)兔子,假設(shè)這些兔子都不會(huì)死, 問:20個(gè)月,又多少對(duì)兔子?

?找規(guī)律:

? ? ?月? ? ? ? ?兔子對(duì)數(shù)

? ? ?1? ? ? ? ? ? ?1

? ? ?2? ? ? ? ? ? ?1

? ? ?3? ? ? ? ? ? ?2

? ? ?4? ? ? ? ? ? ?3

? ? ?5? ? ? ? ? ? ?5

? ? ?6? ? ? ? ? ? ?8

? ? ?7? ? ? ? ? ? ?13

? ? ?...

由此可見,兔子的對(duì)數(shù)數(shù)量是:

1、1、2、3、5、8、13、21...

發(fā)現(xiàn)的規(guī)律是:

? ? ?1、從第三項(xiàng)開始,每一項(xiàng)都是前兩項(xiàng)之和

? ? ?2、說明每一項(xiàng)的前兩項(xiàng)的數(shù)據(jù)是已知的

?如何實(shí)現(xiàn)呢?

1、數(shù)組方式實(shí)現(xiàn)

2、基本變量實(shí)現(xiàn)

3、遞歸方式實(shí)現(xiàn)

使用數(shù)組實(shí)現(xiàn)

參考代碼:

public class RecursionDemo4 {
    public static void main(String[] args) {
        //使用數(shù)組實(shí)現(xiàn)
        int[] arr = new int[20];
        arr[0] = 1;
        arr[1] = 1;
 
        for (int i =2 ;i < arr.length;i++){
            arr[i] = arr[i-2] + arr[i -1];
        }
        System.out.println("第20個(gè)月的兔子對(duì)數(shù)為:" + arr[19]);
    }
}

?輸出結(jié)果:

第20個(gè)月的兔子對(duì)數(shù)為:6765

使用遞歸實(shí)現(xiàn)

參考代碼:

public class RecursionDemo5 {
    public static void main(String[] args) {
 
        System.out.println("第20個(gè)月的兔子對(duì)數(shù)為:" + ribbateFibonacci(20));
 
    }
 
    private static int ribbateFibonacci(int month) {
 
        if (month == 1 || month ==2 ){
            return 1;
        }else {
            return ribbateFibonacci(month-1) +  ribbateFibonacci(month-2);
        }
    }
}

輸出結(jié)果:

第20個(gè)月的兔子對(duì)數(shù)為:6765

總結(jié)

到此這篇關(guān)于Java中的遞歸方法示例介紹的文章就介紹到這了,更多相關(guān)Java遞歸方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java設(shè)計(jì)模式之單例模式

    java設(shè)計(jì)模式之單例模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之單例模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 解決Spring使用@MapperScan問題

    解決Spring使用@MapperScan問題

    這篇文章主要介紹了解決Spring使用@MapperScan問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot中實(shí)現(xiàn)定時(shí)任務(wù)的4種方式詳解

    SpringBoot中實(shí)現(xiàn)定時(shí)任務(wù)的4種方式詳解

    這篇文章主要介紹了SpringBoot中實(shí)現(xiàn)定時(shí)任務(wù)的4種方式詳解,在Springboot中定時(shí)任務(wù)是一項(xiàng)經(jīng)常能用到的功能,實(shí)現(xiàn)定時(shí)任務(wù)的方式有很多,今天來介紹常用的幾種,需要的朋友可以參考下
    2023-11-11
  • java如何通過流讀取圖片做base64編碼

    java如何通過流讀取圖片做base64編碼

    這篇文章主要介紹了java如何通過流讀取圖片做base64編碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java遞歸基礎(chǔ)與遞歸的宏觀語意實(shí)例分析

    Java遞歸基礎(chǔ)與遞歸的宏觀語意實(shí)例分析

    這篇文章主要介紹了Java遞歸基礎(chǔ)與遞歸的宏觀語意,結(jié)合實(shí)例形式分析了java遞歸的相關(guān)原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • Spring中初始化泛型類的方法實(shí)例

    Spring中初始化泛型類的方法實(shí)例

    這篇文章主要給大家介紹了Spring中如何初始化泛型類,文中給出詳細(xì)的介紹和方法實(shí)例,對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友可以參考學(xué)習(xí),下面來一起看看吧。
    2017-01-01
  • SpringBoot?實(shí)現(xiàn)動(dòng)態(tài)添加定時(shí)任務(wù)功能

    SpringBoot?實(shí)現(xiàn)動(dòng)態(tài)添加定時(shí)任務(wù)功能

    這篇文章主要介紹了SpringBoot?動(dòng)態(tài)添加定時(shí)任務(wù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Java線程間協(xié)作wait、notify和notifyAll詳解

    Java線程間協(xié)作wait、notify和notifyAll詳解

    這篇文章主要介紹了Java線程間協(xié)作wait、notify和notifyAll詳解,在 Java 中可以用 wait、notify 和 notifyAll 來實(shí)現(xiàn)線程間的通信,盡管關(guān)于wait和notify的概念很基礎(chǔ),它們也都是Object類的函數(shù),但用它們來寫代碼卻并不簡(jiǎn)單,,需要的朋友可以參考下
    2023-10-10
  • Spring各版本新特性的介紹

    Spring各版本新特性的介紹

    今天小編就為大家分享一篇關(guān)于Spring各版本新特性的介紹,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • SpringBoot模擬員工數(shù)據(jù)庫(kù)并實(shí)現(xiàn)增刪改查操作

    SpringBoot模擬員工數(shù)據(jù)庫(kù)并實(shí)現(xiàn)增刪改查操作

    這篇文章主要給大家介紹了關(guān)于SpringBoot模擬員工數(shù)據(jù)庫(kù)并實(shí)現(xiàn)增刪改查操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09

最新評(píng)論