程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 遞歸案例分享

遞歸案例分享

編輯:C#入門知識

遞歸案例分享。本站提示廣大學習愛好者:(遞歸案例分享)文章只能為提供參考,不一定能成為您想要的結果。以下是遞歸案例分享正文


普通界說
法式挪用本身的編程技能稱為遞歸( recursion)。
一個進程或函數在其界說或解釋中有直接或直接挪用本身的一種辦法,它平日把一個年夜型龐雜的成績層層轉化為一個與原成績類似的范圍較小的成績來求解,遞歸戰略只需大批的法式便可描寫出解題進程所須要的屢次反復盤算,年夜年夜地削減了法式的代碼量。遞歸的才能在於用無限的語句來界說對象的無窮聚集。普通來講,遞歸須要有界限前提、遞歸進步段和遞歸前往段。當界限前提不知足時,遞歸進步;當界限前提知足時,遞歸前往。
留意:
(1) 遞歸就是在進程或函數裡挪用本身;
(2) 在應用遞歸戰略時,必需有一個明白的遞歸停止前提,稱為遞歸出口。

C#遞歸算法實例:

盤算數組{1,1,2,3,5,8.......} 第30位值,不消遞歸,我寫出了以下如許的代碼:


static void Main(string[] args) 
 ...{ 
int[] num=new int[30]; 
num[0]=1; 
num[1]=1; 
int first=num[0]; 
int second=num[1]; 
for (int i = 2; i < num.Length; i++) 
...{ 
 num[i] = first + second; 
 first = second; 
 second = num[i]; 

Console.WriteLine(num[29]); 
Console.ReadLine(); 
 } 

C#遞歸算法的應用,以下是代碼:


static void Main(string[] args) 
 ...{ 

Console.WriteLine(Process1(30)); 
Console.ReadLine();  
 } 
 public static int Process1(int i) 
 ...{ 

//盤算數組{1,1,2,3,5,8.......} 第30位值 
if (i == 0) return 0; 
if (i == 1) return 1; 
else
return Process1(i - 1) + Process1(i - 2); 


// 階乘
public class Factorial {
    public static void main(String[] args) {
        System.out.println(factorial(6));
    }
    public static int factorial(int n) {
        // 出口點
        if (1==n) {
            return 1;
        } else {
            return n * factorial(n - 1);
        }
    }
}
// 斐波那契數列
public class Fibonacci {
    public static void main(String[] args) {
        System.out.println(fibonacci(6));
    }
    //  斐波那契數列:(從第三項開端,後一項都是前兩項的和)
    //  1  1  2  3  5  8  13 ......
    public static int fibonacci(int n) {
        // 出口點
        if (1==n || 2==n) {
            return 1;
        } else {
            return fibonacci(n-1) + fibonacci(n-2);
        }
    }

// 遍歷一個目次下的一切文件
public class FileList {
    private static List<String> fileNameList = new ArrayList<String>();
    public static void main(String[] args) {
        String dir = "D://360Rec";
        File file = new File(dir);
        addAll(file);
        for (String name : fileNameList) {
            System.out.println(name);
        }
    }
    public static void addAll(File file) {
        // 出口點: 是文件或許是空目次
        if (file.isFile() || file.list().length==0) {
            fileNameList.add(file.getName());
        } else {
            File [] files = file.listFiles();
            for (File f : files) {
                addAll(f);
                if (f.isDirectory() && f.list().length!=0) {
                    fileNameList.add(f.getName());
                }
            }
        }
    }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved