您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java中遞歸和循環的優劣勢”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java中遞歸和循環的優劣勢”吧!
循環:當滿足某一條件時反復執行某一操作(循環體)。
遞歸:在一個方法內部對自身進行調用的方法。
遞歸結構包括兩個部分:
1、遞歸頭:即什么時候不調用自身方法,也就是遞歸的結束條件。如果沒有遞歸頭,程序將陷入死循環。
2、遞歸體:即什么時候需要調用自身方法。
好了,廢話不多說,直接來擼代碼(計算階乘的方法)。
package com.bjwyj.method; /** * 遞歸和循環的比較 * @author 吳永吉 * */ public class TestRecursion { public static void main(String[] args) { //以下調用System下的currentTimeMillis()方法只是為了說明遞歸調用比循環調用更耗時 long l1 = System.currentTimeMillis(); System.out.println(factorial(5)); long l2 = System.currentTimeMillis(); System.out.println("遞歸計算階乘耗時:"+(l2-l1)); System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"); long time1 = System.currentTimeMillis(); System.out.println(factorialLoop(5)); long time2 = System.currentTimeMillis(); System.out.println("循環計算階乘耗時:"+(time2-time1)); } //使用遞歸定義計算階乘的方法 public static long factorial(int num) { if(num==1) { //遞歸頭 return 1; }else { return num*factorial(num-1); //遞歸體 } } //使用循環定義計算階乘的方法 public static long factorialLoop(int n) { int result = 1; //接收計算結果 while(n>1) { result *= n*(n-1); //實現計算結果的累乘操作 n -= 2; //每次減去2,實現數字的迭代操作 } return result; } }
執行結果:
120
遞歸計算階乘耗時:1
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
120
循環計算階乘耗時:0
由結果可以看出,使用遞歸算法比使用循環算法更耗時。
為了更好地比較遞歸算法的優劣,上述采用while循環與遞歸算法進行對比。
總結:
棧,主要是用來存放棧幀的,每執行一個方法就會出現壓棧操作,所以采用遞歸的時候產生的棧幀比較多,遞歸就會影響到內存,非常消耗內存。而使用循環就執行了一個方法,壓入棧幀一次,只存在一個棧幀,所以比較節省內存。
感謝各位的閱讀,以上就是“Java中遞歸和循環的優劣勢”的內容了,經過本文的學習后,相信大家對Java中遞歸和循環的優劣勢這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。