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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数据结构之递归

發布時間:2024/4/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构之递归 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  程序調用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設計語言中廣泛應用。 一個過程或函函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語語句來定義對象的無線集合。一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。介紹遞歸幾個典型例子。

一、數字三角形

  

  具體代碼實現:

1 // 遞歸經典案列:數字三角形 2 public static int trigle(int n) { 3 if (n == 1) { 4 return 1; 5 } 6 return n + trigle(n - 1); 7 }

二、遞歸實現變位字(全排列)

1 // 遞歸實現變位字(全排列) 2 public static void permutation(char[] buf, int start, int end) { 3 if (start == end) {// 當只要求對數組中一個字母進行全排列時,只要就按該數組輸出即可 4 for (int i = 0; i <= end; i++) { 5 System.out.print(buf[i]); 6 } 7 System.out.println(); 8 } else {// 多個字母全排列 9 for (int i = start; i <= end; i++) { 10 char temp = buf[start];// 交換數組第一個元素與后續的元素 11 buf[start] = buf[i]; 12 buf[i] = temp; 13 14 permutation(buf, start + 1, end);// 后續元素遞歸全排列 15 16 temp = buf[start];// 將交換后的數組還原 17 buf[start] = buf[i]; 18 buf[i] = temp; 19 } 20 } 21 }

三、遞歸解決階乘問題

1 // 遞歸解決階乘問題 2 public static int factorial(int n) { 3 if (n == 0) { 4 return 1; 5 } 6 return n * factorial(n - 1); 7 }

四、遞歸實現二分查找(其實用的是分治的思想)

1 // 分治:遞歸實現二分查找 2 public static int recBinary(int arr[], int search, int left, int right) { 3 int half; 4 while (left <= right) { 5 half = (left + right) / 2; 6 if (arr[half] > search) { 7 return recBinary(arr, search, left, half - 1); 8 } else if (arr[half] < search) { 9 return recBinary(arr, search, half + 1, right); 10 } else { 11 return half; 12 } 13 } 14 return -left - 1; 15 }

五、遞歸實現漢諾塔

              ?

具體代碼實現:

1 // 遞歸實現漢諾塔,把圓盤從A借助B移動到C 2 public static void hanio(int n, char from, char inter, char to) { 3 if (n == 1) { 4 System.out.println("disk 1 from " + from + " to " + to); 5 } else { 6 hanio(n - 1, from, to, inter); 7 System.out.println("disk " + n + " from " + from + " to " + to); 8 hanio(n - 1, inter, from, to); 9 } 10 } 程序運行結果: disk 1 from A to C disk 2 from A to B disk 1 from C to B disk 3 from A to C disk 1 from B to A disk 2 from B to C disk 1 from A to C

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

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

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