💜寫在前邊💜
前言
咱們在C語言裡肯定都學過函數吧,相信大家對函數的了解已經很深刻了,因為函數在C裡用的會很多,特别是做項目的時候,會分子產品來寫,Java裡同樣為大家提供了“函數”,隻不過叫法不一樣,Java裡叫【方法】,接下來請往下看
【☕Java】C語言裡叫【函數】,Java裡叫【方法】
🌟方法的基本用法
🌙什麼是方法(method)
🌙方法定義文法
🌙方法調用的執行過程
🌙實參和形參的關系(敲重點)
🌙無傳回值的方法
🌟方法的重載
🌙重載要解決的問題·
🌙使用重載
🌙重載的規則
🌟方法遞歸
🌙遞歸的概念
🌙遞歸執行過程分析
🌙遞歸練習
🌙遞歸總結
方法就是一個代碼片段. 類似于 C 語言中的 “函數”.
方法存在的意義:
1. 是能夠子產品化的組織代碼(當代碼規模比較複雜的時候).
2. 做到代碼被重複使用, 一份代碼可以在多個位置使用.
3. 讓代碼更好了解更簡單.
4. 直接調用現有方法開發, 不必重複造輪子.
注意事項
1. public 和 static 兩個關鍵字在此處具有特定含義, 暫時不讨論, 後面會詳細介紹.
2. 方法定義時, 參數可以沒有. 每個參數要指定類型
3. 方法定義時, 傳回值也可以沒有, 如果沒有傳回值, 則傳回值類型應寫成 void(類似C語言)
4. 方法定義時的參數稱為 “形參”, 方法調用時的參數稱為 “實參”.
5. 方法的定義必須在類之中, 代碼書寫在調用位置的上方或者下方均可.
6. Java 中 沒有 “函數聲明” 這樣的概念(個人覺得是很爽的,在C裡邊經常被函數聲明的問題惡心到).
基本規則
定義方法的時候, 不會執行方法的代碼. 隻有調用的時候才會執行.
當方法被調用的時候, 會将實參指派給形參.
參數傳遞完畢後, 就會執行到方法體代碼.
當方法執行完畢之後(遇到 return 語句), 就執行完畢, 回到方法調用位置繼續往下執行.
一個方法可以被多次調用.
使用方法, 避免使用二重循環, 讓代碼更簡單清晰
方法的傳回值是可選的. 有些時候可以沒有的.
有些時候我們需要用一個函數同時相容多種參數的情況, 我們就可以使用到方法重載.
方法的名字都叫 add. 但是有的 add 是計算 int 相加, 有的是 double 相加; 有的計算兩個數字相加, 有的是計算三個數字相加.
同一個方法名字, 提供不同版本的實作, 稱為 方法重載
針對同一個類或者繼承關系:
方法名相同
方法的參數不同(參數個數或者參數類型)
方法的傳回值類型不影響重載.
當兩個方法的名字相同, 參數也相同,
但是傳回值不同的時候, 不構成重載.
若一個對象部分的包含自己或用它自己給自己定義,那麼我們說這個對象是遞歸的;若一個過程直接或間接的調用自己,那麼這個過程是遞歸的。遞歸的思想是把問題分解為規模更小具有與原問題相同解法的子問題,是以可以讓我們思考的方式更加簡單,程式也更加簡練。不過就遞歸函數而言遞歸增加了壓棧開銷,是以【空間複雜度比較高】。
遞歸相當于數學上的 “數學歸納法”, 有一個起始條件, 然後有一個遞推公式.
遞歸條件:
(1)減小問題規模,并使子問題與原問題有相同解法。
(2)設定出口,如果沒有出口那麼程式會一直遞歸下去。
例如, 我們求 N!
起始條件: N = 1 的時候, N! 為 1. 這個起始條件相當于遞歸的結束條件.
遞歸公式: 求 N! , 直接不好求, 可以把問題轉換成 N! => N * (N-1)!
遞歸的程式的執行過程不太容易了解, 要想了解清楚遞歸, 必須先了解清楚 “方法的執行過程”, 尤其是 “方法執行結束之後, 回到調用位置繼續往下執行”. 執行過程圖解
代碼示例4 (敲重點!!敲重點!!敲重點!!)
求斐波那契數列的第n項【斐波那契數列是一組第一位和第二位為1,從第三位開始,後一位是前兩位和的一組遞增數列,像這樣的:0、1、1、2、3、5、8、13、21、34、55…】
遞歸是一種重要的程式設計解決問題的方式.
有些問題天然就是使用遞歸方式定義的(例如斐波那契數列, 二叉樹等), 此時使用遞歸來解就很容易.
有些問題使用遞歸和使用非遞歸(循環)都可以解決. 那麼此時更推薦使用循環, 相比于遞歸, 非遞歸程式更加高效.