導航:首頁 > 編程語言 > java遞歸尾遞歸

java遞歸尾遞歸

發布時間:2023-07-16 03:37:22

『壹』 java中遞歸的作用是什麼為什麼要用到遞歸

你的兩個問題其實是一個問題,對吧。
遞歸的作用:遞歸演算法可以解決一些通過遞歸定義的題目。
首先需要明白什麼是遞歸定義的題目,通俗一點來說就是一個大問題中蘊含著小問題,而小問題同時又與大問題的結構相同,只是規模更小。
比如n階乘的定義可以理解為:
n!= n*(n-1)!
從上面不難看出 (n-1)! 就是比n! 規模更小的問題,按照此方法不斷分解下去,就能得到最初的一些基本的已知的數據。然後反過來就可以求出最終的結果了。
n的階乘演算法如下:
private static int jieCheng(int n) {
if(n == 1)
return 1;
else {
return n*jieCheng(n-1);
}
}
還有就是數據結構中二叉樹的定義,也是遞歸定義的。因此二叉樹的好多操作都是通過遞歸實現的。
用遞歸會使程序相當簡潔。

『貳』 斐波那契數列在JAVA中使用遞歸和循環哪個更好

public class A
{
public static void main(String[] args)
{
//列印斐波那契(Fibonacci)數列,求出前20項:1,1,2,3,5,8,13,21....
/*
int[] fib = new int[20];
fib[0] = 1;
fib[1] = 1;
for (int i=2;i<fib.length ;i++ )
{
fib[i] = fib[i-1]+fib[i-2];
}
//列印輸出
for (int i=0;i<fib.length ;i++ )
{
System.out.print(fib[i]+" ");
}
*/
我認為用循環好。

『叄』 java中遞歸演算法是什麼怎麼算的

一、遞歸演算法基本思路:

Java遞歸演算法是基於Java語言實現的遞歸演算法。遞歸演算法是一種直接或者間接調用自身函數或者方法的演算法。遞歸演算法實質是把問題分解成規模縮小的同類問題的子問題,然後遞歸調用方法表示問題的解。遞歸往往能給我們帶來非常簡潔非常直觀的代碼形式,從而使我們的編碼大大簡化,然而遞歸的思維確實跟我們的常規思維相逆的,通常都是從上而下的思維問題,而遞歸趨勢從下往上的進行思維。

二、遞歸演算法解決問題的特點:

【1】遞歸就是方法里調用自身。

【2】在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。

【3】遞歸演算法代碼顯得很簡潔,但遞歸演算法解題的運行效率較低。所以不提倡用遞歸設計程序。

【4】在遞歸調用的過程中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等,所以一般不提倡用遞歸演算法設計程序。

【5】在做遞歸演算法的時候,一定把握出口,也就是做遞歸演算法必須要有一個明確的遞歸結束條件。這一點是非常重要的。其實這個出口就是一個條件,當滿足了這個條件的時候我們就不再遞歸了。

三、代碼示例:

publicclassFactorial{

//thisisarecursivefunction

intfact(intn){

if(n==1)return1;

returnfact(n-1)*n;

}}
publicclassTestFactorial{publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

Factorialfactorial=newFactorial();

System.out.println("factorial(5)="+factorial.fact(5));

}
}

代碼執行流程圖如下:

此程序中n=5就是程序的出口。

『肆』 JAVA的遞歸查詢指定後綴名文件的問題

你的程序只列印指定目錄下的「.java」文件,是因為dir.listFiles(new FilenameFilter());只返回過濾後的文件列表,所以返回的是指定目錄下的「.java」文件

你的程序我幫你改好了,你看看吧

importjava.io.*;
classtest2
{
publicstaticvoidmain(String[]args)
{
Filefi=newFile("D:\BD\java2016");//指定查找目錄
showdir(fi);
}
publicstaticvoidshowdir(Filedir)//定義一個返回目錄中所有文件的方法showdir
{
if(dir.isDirectory())
{//判斷是否目錄,
File[]files=dir.listFiles(newFilenameFilter()//定義過濾器,過濾文件類型為.java的文件
{
publicbooleanaccept(Filedir,Stringname)
{
returnname.endsWith(".java");
}
});
for(intx=0;x<files.length;x++)//列印以.java結尾的文件名
{
System.out.println(files[x]);
}
File[]files1=dir.listFiles();//定義沒有過濾器的文件列表
for(intx=0;x<files1.length;x++)
{
if(files1[x].isDirectory())//如果是目錄則遞歸調用showdir方法,不是目錄則忽略
showdir(files1[x]);
}
}
}
}
閱讀全文

與java遞歸尾遞歸相關的資料

熱點內容
單片機線性輸出 瀏覽:413
android40設計規范 瀏覽:163
mc命令方塊變大 瀏覽:997
rpgxp手機編程工具 瀏覽:331
小米電視4谷歌伺服器地址 瀏覽:593
復雜驅動程序編譯 瀏覽:501
西門子數控車床編程指令 瀏覽:615
華為手機電池有沒有加密 瀏覽:221
域名查詢被牆源碼 瀏覽:678
電腦文件夾壓縮包格式 瀏覽:67
安卓堆糖怎麼保存 瀏覽:358
multisim中單片機 瀏覽:603
加密電梯卡怎麼復制到蘋果手機上 瀏覽:304
php獲取數據類型 瀏覽:915
新概念c51單片機 瀏覽:326
刪除文件的命令行 瀏覽:981
java編程軟體eclipse 瀏覽:198
番茄app怎麼完成簽約流程 瀏覽:725
ibm伺服器如何進u盤啟動 瀏覽:185
網路驅動重啟命令 瀏覽:446