日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 递归函数_浅谈java递归函数

發布時間:2023/12/1 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 递归函数_浅谈java递归函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

遞歸函數的定義:遞歸函數即自調用函數,在函數體內直接或間接的調用自己,即函數的嵌套是函數本身。

打個生動的比喻:我們可以把” 遞歸 “比喻成 “查字典 “,當你查一個詞,發現這個詞的解釋中某個詞仍然不懂,于是你開始查這第二個詞。可惜,第二個詞里仍然有不懂的詞,于是查第三個詞,這樣查下去,直到有一個詞的解釋是你完全能看懂的,那么遞歸走到了盡頭,然后你開始后退,逐個明白之前查過的每一個詞,最終,你明白了最開始那個詞的意思。(摘自知乎的一個回答)

下面是計算整數i的階乘的遞歸方法。

/*

求整數i的階乘

*/

public static int fac(int i) {

if(i==1) {

return 1;

}

else

return i*fac(i-1);

}

斐波拉契數列:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

public static int fib(int num) {

if(num == 1 || num == 2) {

return 1;

}else {

return fib(num - 2) + fib(num - 1);

}

}

經典案例:漢諾塔算法

/*

* 某寺廟前有三根柱子A、B、C,開始時A柱上有n個盤子,盤子大小不等,大的在下、小的在上,

* 有一老和尚想把這n個盤子從A柱移到C柱上,但每次只允許移動一個盤子(如上圖所示),

* 且在移動過程序中每根柱子上都始終保持大盤在下、小盤在上。在移動過程中可以借助B柱。

* 要求:正整數n由鍵盤輸入。

*/

public class Hanoi {

public static void main(String[] args) {

Scanner s=new Scanner(system.in );

System.out.println("請輸入n:");

int input=s.nextInt();

hanoi(input,'A','B','C');

}

public static void move(char A,int n,char C) {

System.out.println("將編號為"+n+"的盤子從"+A+"轉移到"+C);

}

public static void hanoi(int n,char A,char B,char C) {

if(n==1) {

move(A,1,C);//如果只有一個盤,則直接將該盤從A轉至C

}

else {

hanoi(n-1,A,C,B);//將編號為n-1的盤子從A通過C轉至B

move(A,n,C);//將A最底層盤轉至C

hanoi(n-1,B,A,C);//將標號為n-1的盤子從B通過A轉至C

}

}

}

總結:

優點:相比非遞歸函數,遞歸函數代碼更簡潔清晰,可讀性更好。

缺點:由于調用遞歸函數需要多次用到系統棧內存,所以空間消耗要比非遞歸代碼要大很多。而且,如果遞歸深度太大,或者由于函數本身邏輯錯誤可能會導致內存溢出,系統崩潰。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java 递归函数_浅谈java递归函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。