溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java遞歸的概念是什么與如何使用

發(fā)布時間:2022-03-15 16:50:52 來源:億速云 閱讀:153 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Java遞歸的概念是什么與如何使用”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java遞歸的概念是什么與如何使用”文章能幫助大家解決問題。

    一、遞歸的概念

    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é)果,

    畫圖講解:

    Java遞歸的概念是什么與如何使用

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

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

    Java遞歸的概念是什么與如何使用

    ,如果報了這個錯誤那么一定是你的終止條件有錯誤,或者是沒寫終止條件導(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的階乘   畫圖分析:

    Java遞歸的概念是什么與如何使用

    實現(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));
     
        }
    }

    代碼畫圖講解:

    Java遞歸的概念是什么與如何使用

    例題:求n的和

    畫圖分析:

    Java遞歸的概念是什么與如何使用

     實現(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ù)字 

    畫圖分析:

    Java遞歸的概念是什么與如何使用

     實現(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);
     
     
        }
    }

    例題:寫一個遞歸方法,輸入一個非負(fù)整數(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ù)是幾 

    畫圖分析:

    Java遞歸的概念是什么與如何使用

    實現(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));
     
        }

    關(guān)于“Java遞歸的概念是什么與如何使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI