java中方法遞歸的簡單示例
一、遞歸的思路
一個方法在執(zhí)行時,調(diào)用自身被稱為“遞歸”。
遞歸相當(dāng)于數(shù)學(xué)歸納法,有一個起始條件,有一個遞推公式。
遞歸可以分為:單路遞歸和多路遞歸(如二叉樹和斐波那契數(shù)列)。
二、代碼舉例
1、n的階乘
//n的階乘 public static int fac(int num){ if(num == 1){ return 1; } return num * fac(num-1); } public static void main(String[] args) { int n = 5; System.out.println("result = " + fac(n)); }
運(yùn)行結(jié)果
2、按照順序打印一個數(shù)字的每一位
//按照順序打印一個數(shù)字的每一位 public static void print(int n){ if( n > 9 ){ print( n / 10); } System.out.print( n % 10 ); } public static void main(String[] args) { print(12345); }
運(yùn)行結(jié)果
3、輸入一個非負(fù)整數(shù),返回組成他的數(shù)字之和,如輸入1729,則返回1+7+2+9=19
public static int sum(int n){ if(n < 10){ return n; } return n %10 + sum( n/10 ); } public static void main(String[] args) { int n = 525615; int ret = sum( n); System.out.println("the sum of "+n +" = "+ ret); }
運(yùn)行結(jié)果
4、求斐波那契數(shù)列的第n項(xiàng)
斐波那契數(shù)列:1 1 2 3 5 8 13
public static int fib(int n){ if(n == 1 || n == 2){ return 1; } return fib(n - 1) + fib(n - 2 ); } public static void main(String[] args) { System.out.println(fib(10)); }
運(yùn)行結(jié)果
**注意:當(dāng)n的值越來越大時,程序運(yùn)行的速度很慢,原因是進(jìn)行了大量的重復(fù)運(yùn)算。所以對于斐波那契數(shù)列,一般采用迭代的代碼版本。
public static int fib(int n){ int n1 = 1; int n2 = 1; int num = 0; for( int i=3; i<=n ;i++){ num = n1 + n2; n1 = n2; n2 = num; } return num; } public static void main(String[] args) { System.out.println(fib(10)); }
運(yùn)行結(jié)果
需要注意的是,如果編譯時出現(xiàn)以下錯誤,說明棧溢出,要仔細(xì)檢查代碼的終止條件是否沒有寫或者寫錯。
總結(jié)
到此這篇關(guān)于java中方法遞歸的文章就介紹到這了,更多相關(guān)java方法遞歸內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java 數(shù)據(jù)結(jié)構(gòu)中棧和隊(duì)列的實(shí)例詳解
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)中棧和隊(duì)列的實(shí)例詳解的相關(guān)資料,主要使用數(shù)組與線性表的方法來實(shí)現(xiàn),需要的朋友可以參考下2017-09-09GSON實(shí)現(xiàn)Java對象的JSON序列化與反序列化的實(shí)例教程
GSON是Google開發(fā)并開源的一個Java的JSON轉(zhuǎn)換庫,這里我們將來講解GSON實(shí)現(xiàn)Java對象的JSON序列化與反序列化的實(shí)例教程,需要的朋友可以參考下2016-06-06SpringBoot基于Redis的分布式鎖實(shí)現(xiàn)過程記錄
Redis是一套 key-value 高性能數(shù)據(jù)庫,使用它可以大大提高我們的開發(fā)效率,在SpringBoot中,自動配置也幫我們節(jié)約了大量的配置,下面這篇文章主要給大家介紹了關(guān)于SpringBoot基于Redis的分布式鎖實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2022-01-01Java實(shí)戰(zhàn)之小米交易商城系統(tǒng)的實(shí)現(xiàn)
這篇文章將利用Java實(shí)現(xiàn)小米交易商城系統(tǒng),文中采用的技術(shù)有:JSP?、Spring、SpringMVC、MyBatis等,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-04-04springsecurity實(shí)現(xiàn)攔截器的使用示例
Spring Security 可以替代攔截器,同時還可以提供更加細(xì)粒度的權(quán)限控制和身份認(rèn)證,本文就來介紹一下springsecurity實(shí)現(xiàn)攔截器的使用示例,感興趣的可以了解一下2023-10-10分析java中全面的單例模式多種實(shí)現(xiàn)方式
單例模式是一種常用的軟件設(shè)計(jì)模式,單例對象的類只能允許一個實(shí)例存在。許多時候整個系統(tǒng)只需要擁有一個的全局對象,有利于協(xié)調(diào)系統(tǒng)整體的行為。比如在某個服務(wù)器程序中,該服務(wù)器的配置信息存放在一個文件中。本文將介紹它的思想和多種實(shí)現(xiàn)方式2021-06-06