溫馨提示×

溫馨提示×

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

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

java中遞歸和迭代有什么區別

發布時間:2020-06-12 14:31:59 來源:億速云 閱讀:163 作者:元一 欄目:編程語言

1.概念

遞歸:無限調用自身這個函數,每次調用總會改動一個關鍵變量,直到這個關鍵變量達到邊界的時候,不再調用。

個人理解就是自己調用自己,直到滿足一個條件結束自己調用自己的過程,這個就是遞歸。舉一個通俗的點的例子:

假設你在一個電影院,你想知道自己坐在哪一排,但是前面人很多,你懶得去數了,于是你問前一排的人「你坐在哪一排?」,這樣前面的人 (代號 A) 回答你以后,你就知道自己在哪一排了——只要把 A 的答案加一,就是自己所在的排了,不料 A 比你還懶,他也不想數,于是他也問他前面的人 B「你坐在哪一排?」,這樣 A 可以用和你一模一樣的步驟知道自己所在的排。然后 B 也如法炮制,直到他們這一串人問到了最前面的一排(或者說問到了知道自己是哪一排的人,預示著調用結束),第一排的人告訴問問題的人「我在第一排」,最后大家就都知道自己在哪一排了

迭代:是重復反饋過程的活動,其目的通常是為了逼近所需目標或結果。

每一次對過程的重復稱為一次“迭代”,而每一次迭代得到的結果會作為下一次迭代的初始值。在Java中,我們使用接口機制來指定一個類所必須實現的方法。對于可迭代的集合數據類型,Java以及為我們定義了所需的接口。

2.遞歸

2.1構成遞歸需具備的條件:

  1. 子問題須與原始問題為同樣的事,且更為簡單;

2. 不能無限制地調用本身,須有個出口,化簡為非遞歸狀況處理。

2.2遞歸的基本原理

第一:每一級的函數調用都有自己的變量。

第二:每一次函數調用都會有一次返回。

第三:遞歸函數中,位于遞歸調用前的語句和各級被調用函數具有相同的執行順序。

第四:遞歸函數中,位于遞歸調用后的語句的執行順序和各個被調用函數的順序相反。

第五:雖然每一級遞歸都有自己的變量,但是函數代碼并不會得到復制。

2.3遞歸優缺點

java中遞歸和迭代有什么區別

2.4編寫一個遞歸函數

  • 這個遞歸函數的功能是什么,怎樣調用這個函數,即設計好遞歸函數的返回值和參數列表

  • 什么時候應該結束這個遞歸,它的邊界條件(出口)是什么(邊界條件)

  • 在非邊界情況時,怎樣從第n層轉變成第n+1層(遞推公式)
例:
int f(int n) {
  //出口
    if (n > 0) {
        return n + f(n - 1);
    } else {
        return 0;
    }
}
解析:

java中遞歸和迭代有什么區別

 具體步驟:

java中遞歸和迭代有什么區別

遞歸遞歸,有遞就得有歸(出口),只遞不歸會導致程序崩潰。

要得到n - 1的積直接調用 f(x) 這個函數就行了,完全不需要思考這個函數怎么執行的。

3.例題:走樓梯

3.1題目描述:

一個臺階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有多少總跳法。I第一行輸入T,表示有多少個測試數據。接下來T行,每行輸入一個數n,表示臺階的階數。
輸出時每一行對應一個輸出。

假如一共有三級臺階,一共有多少種走法?

java中遞歸和迭代有什么區別

假設有n級臺階,一共有多少種走法?

java中遞歸和迭代有什么區別

當n > 2 時,如果走1級有多少種走法 + 如果走2級有多少種走法,就是n級臺階所有的走法。

4.求n!遞歸法

int fun(int n) {
    if (n == 1) {
        return 1;
    } else {
        return n * fun(n - 1);
    }
}

5.求n!迭代法

int fun(int n) {
    int x = 1;
    for (int i = 2; i <= n; i++) {
        x *= i;
    }
    return x;
}

6.迭代

  迭代與普通循環的區別是:迭代時,循環代碼中參與運算的變量同時是保存結果的變量,當前保存的結果作為下一次循環計算的初始值。

  遞歸與普通循環的區別是:循環是有去無回,而遞歸則是有去有回(因為存在終止條件)。

  在循環的次數較大的時候,迭代的效率明顯高于遞歸。

6.1現實中的迭代

  迭代的方式有所不同,假如有個產品要求6個月交貨,我在第一個月就會拿出一個產品來,當然,這個產品會很不完善,會有很多功能還沒有添加進去,bug很多,還不穩定,但客戶看了以后,會提出更詳細的修改意見,這樣,你就知道自己距離客戶的需求有多遠,我回家以后,再花一個月,在上個月所作的需求分析、框架設計、代碼、測試等等的基礎上,進一步改進,又拿出一個更完善的產品來,給客戶看,讓他們提意見。
就這樣,我的產品在功能上、質量上都能夠逐漸逼近客戶的要求,不會出現我花了大量心血后,直到最后發布之時才發現根本不是客戶要的東西的情況。

6.2優勢

這個過程也很像打游戲,你剛開始玩,一下子就輸了,但是隨著你玩的次數越來越多,你的技藝就越來越精湛,而這個結果,不是你在開始玩游戲的時候,規劃出來的,而是在你玩的過程中,通過不斷的輸不斷的輸,練出來的。

所以,你能達成的結果,都是在你做的過程中,不斷試錯,不斷調整,不斷精進,最后自然而然得到的一個結果。

所以,我們不能把迭代簡單的理解為“升級”。

升級,更多描述的是一個結果,是一種直接的,一次性的,達成的一個目標,是一種線性的進程。

而迭代,是通過無數次,不斷的,重復的,接近一個目標,折返接近,再折返再接近,最終達到目標。它不是一次性完成的,是通過不斷重復的,但每次重復又比之前更好一點,這樣一種非線性的進程。

現在我們把“迭代”的關鍵詞拆解一下:

1.重復:

不斷的重復做,而不是一次性的完成。

2.改進

在做的過程中不斷的改進、調整、優化。

3.認知升級

迭代的過程就是不斷提高認知的過程,升級只是這個過程的一個結果。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女