最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?精煉解讀遞歸的概念與使用

 更新時間:2022年03月15日 14:25:23   作者:K穩(wěn)重  
一說起遞歸,我想每個人都不陌生。舉個從小就聽過的例子:從前有座山,山里有座廟,廟里有個和尚,和尚在講故事,從前有座山,山里有座廟,廟里有個和尚,和尚在講故事,從前有座山,要理解遞歸,就得先了解什么是遞歸,實際上這句話就是一個遞歸

一、遞歸的概念

1.什么是遞歸?

遞歸就是:方法自己調(diào)用方法的過程。

使用遞歸有兩個前提條件:

1.有一個趨近與終止的條件。

2.自己調(diào)用自己 。

如何實現(xiàn)遞歸?

最重要的方式是:實現(xiàn)遞歸,需要去推導(dǎo)出一個遞推公式。

思考遞歸的方式:橫向思考,根據(jù)遞推公式來思考。

代碼的執(zhí)行:是縱向執(zhí)行。

2.遞歸講解

首先看下面代碼:

public class TestDemo {
    public static void func(){
        
        func();   //自己調(diào)用自己本身
    }
 
 
    public static void main(String[] args) {
        func();
 
    }
}

上圖代碼就是一個簡單的遞歸。

我們再來看一下這個代碼的運行結(jié)果,

畫圖講解:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 對于上圖這個遞歸來說,根本沒有一個趨于終止的條件,所以這個函數(shù)會無休止的遞歸下去。每次遞歸都要在棧上開辟內(nèi)存,一直在棧上開辟內(nèi)存,總有一次會棧超出。

老鐵們要記?。阂坏┠銓懙倪f歸有問題,如果是邊界沒找對一定會報一個

7ae60fddda4c4c9183eef750dc310410.jpg

,如果報了這個錯誤那么一定是你的終止條件有錯誤,或者是沒寫終止條件導(dǎo)致了你在遞歸的過程當(dāng)中深度過大,最終棧溢出。

如果想要讓上述代碼正確,我們需要給它加入一個終止條件。

正確代碼如下:

public class TestDemo {
    public static void func(int n){
        if(n == 1) return;
        func(n -1);
    }
 
 
    public static void main(String[] args) {
        func(3);
 
    }
}

下面會通過簡單的例題讓大家更加深入的了解遞歸

二、遞歸的使用 

例題:遞歸方式求n的階乘 畫圖分析:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

實現(xiàn)代碼 :

public class TestDemo {
    public static int fac(int n){
        if(n == 1) {
            return 1;
        }
        int tmp = n * fac(n - 1);
        return tmp;
    }
    public static void main(String[] args) {
        System.out.println(fac(5));
 
    }
}

代碼畫圖講解:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

例題:求n的和

畫圖分析:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 實現(xiàn)代碼:

第一種寫法:
public class TestDemo {
    public static int sumAdd(int n){
        if(n == 1) {
            return 1;
        }
        int tmp = n + sumAdd(n - 1);
        return tmp;
    }
    public static void main(String[] args) {
        System.out.println(sumAdd(3));
 
    }
}
 
第二種寫法:
public class TestDemo {
    public static int sumAdd(int n){
        if(n == 1) {
            return 1;
        }
       
        return n + sumAdd(n -1);
    }
    public static void main(String[] args) {
        System.out.println(sumAdd(3));
 
    }
}

例題:遞歸實現(xiàn)按照順序打印每一位的數(shù)字 

畫圖分析:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

 實現(xiàn)代碼:

public class TestDemo {
 
    public static void print(int n){
        if(n < 10){
            System.out.print(n+" ");
        }else{
            print(n/10);
            System.out.print(n%10+" ");
        }
    }
    public static void main(String[] args) {
        print(1234);
 
 
    }
}

例題:寫一個遞歸方法,輸入一個非負整數(shù),返回組成它的數(shù)字之和。例如:輸入1729,則應(yīng)該返回1+7+2+9

實現(xiàn)代碼:

public class TestDemo {
 
 
    public static int sumEveryone(int n){
        if(n < 10){
           return n;
        }else{
            return n%10 + sumEveryone(n/10);
        }
    }
 
    public static void main(String[] args) {
        System.out.println(sumEveryone(7910));
 
    }
 
}

例題:求第n個斐波那契數(shù)是幾 

畫圖分析:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS-WqvuKAjQ==,size_20,color_FFFFFF,t_70,g_se,x_16

實現(xiàn)代碼:

第一種方法:遞歸
public class TestDemo {
    public static int fib(int n){
        if(n == 1 || n == 2){
            return 1;
        }else{
            return fib(n-2)+fib(n-1);
        }
    }
    public static void main(String[] args) {
        System.out.println(fib(5));
 
    }
 
 
 
第二種方法:叫做循環(huán)(迭代)實現(xiàn)
    public static int fib2(int n){
        if(n == 1 || n==2){
            return 1;
        }
            int f1 = 1;
            int f2 = 1;
            int f3 = 0;
            for (int i = 3; i < n; i++) {
                f3 = f1+f2;
                f1 = f2;
                f2 = f3;
            }
            return f3;
 
    }
    public static void main(String[] args) {
        System.out.println(fib2(45));
 
    }

總結(jié):

本文簡單介紹了什么是遞歸、遞歸講解、遞歸如何使用。通過簡單例題的方式加深對遞歸的印象。上述就是今天的內(nèi)容,文章哪里出現(xiàn)了問題我都會積極改正,也希望大家能更快的掌握自己想要的知識,讓我們一起加油?。。。?!

到此這篇關(guān)于Java 精煉解讀遞歸的概念與使用的文章就介紹到這了,更多相關(guān)Java 遞歸內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

芷江| 吐鲁番市| 余庆县| 沁阳市| 连南| 米易县| 晋州市| 乌鲁木齐县| 新乡县| 华安县| 运城市| 洛扎县| 孝义市| 乌拉特中旗| 虎林市| 凌云县| 新闻| 沭阳县| 景宁| 津南区| 吕梁市| 张家港市| 建阳市| 特克斯县| 资溪县| 屏南县| 大田县| 年辖:市辖区| 德清县| 福泉市| 文昌市| 怀仁县| 温宿县| 云阳县| 大安市| 甘德县| 类乌齐县| SHOW| 凌海市| 区。| 盱眙县|