再帰的な概要
再帰:再帰的に呼び出され、現在の方法では、独自の道を呼び出すために参照し
再帰カテゴリー:
1.直接の方法は、自分自身を再帰的に呼ばれる自分自身を呼び出します。
2.間接再帰を方法B方法Aによって呼び出すことができる、方法Bは、C法、方法C方法Aコールを呼び出します。
再帰的な注意事項
再帰的な条件は、再帰が他スタックメモリのオーバーフローを引き起こす、無限ループが存在するであろう、停止させることができることを確実にするために制限されなければなりません。限られた条件ではなく、あまりにも多くの再帰再帰がありますが。それ以外の場合は、スタックメモリのオーバーフローが発生します。コンストラクタ無効再帰
1 パッケージdemosummary.recursive;
2
。3 パブリック クラスRecursiveDemo1 {
4。 公共 静的 ボイドメイン(文字列[]引数){
5。 // メソッド呼び出し
6。 A(1。);
7 // メソッドbを呼び出す
8。 B();
9 }
10
11 プライベート 静的 ボイド A(INT I){
12である のSystem.out.println(I);
13である // 回避メモリオーバーフロー状態が発生する追加
14 IF(I == 10 ){
15 リターン;
16 }
17 A(++ I);
18れる }
19。
20 // 限定ではなく、メモリのオーバーフローが発生する可能性が
21である プライベート 静的 ボイド(B){
22である のSystem.out.println( "方法B" );
23である B ();
24 }
25 }
再帰的累積和
1 package demosummary.recursive;
2
3 /**
4 * 计算1~n的和
5 * 分析:
6 * num的累和 = num + (num-1)的累和,所以可以把累和的操作定义成一个方法,递归调用
7 */
8 public class RecursiveSum {
9 public static void main(String[] args) {
10 int sum = getSum(5);
11 System.out.println(sum);
12 }
13
14 private static int getSum(int num) {
15 if (num == 1) {
16 return 1;
17 }
18 return num+getSum(num -1);
19 }
20 }
递归求阶乘(同求和一样解法)
1 package demosummary.recursive;
2
3 public class RecursiveFactorial {
4 public static void main(String[] args) {
5 int sum = getSum(5);
6 System.out.println(sum);
7 }
8
9 private static int getSum(int num) {
10 //当num=1时,停止递归,防止发生内存溢出现象
11 if (num == 1) {
12 return 1;
13 }
14 return num * getSum(num - 1);
15 }
16 }
递归打印多级目录
1 package demosummary.recursive;
2
3 import java.io.File;
4
5 public class RecursivePrintDir {
6 public static void main(String[] args) {
7 //创建File对象
8 File file = new File(".//filter");
9 //调用打印方法
10 printDir(file);
11 }
12
13 private static void printDir(File dir) {
14 //获取目录的集合
15 File[] files = dir.listFiles();
16 //循环打印目录
17 for (File file : files) {
18 if (file.isFile()) {//判断是否为文件
19 System.out.println("文件的路径:" + file.getAbsolutePath());
20 } else {//判断是否为目录
21 System.out.println("目录的路径:" + file.getAbsolutePath());
22 //是目录则继续往下打印
23 printDir(file);
24 }
25 }
26 }
27 }