1、遞歸做為一種算法在程序設(shè)計語言中廣泛使用,是指函數(shù)/過程/子程序在運(yùn)行過程中直接或間接調(diào)用自身而產(chǎn)生的重入現(xiàn)象。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比盧氏網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式盧氏網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋盧氏地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴。
2、遞歸算法一般用于解決三類問題:
1)數(shù)據(jù)的定義是按遞歸定義的。(Fibonacci(斐波那契)的函數(shù))
2)問題解法按遞歸算法實(shí)現(xiàn)。(回溯)
3)數(shù)據(jù)的結(jié)構(gòu)形式是按遞歸定義的。(樹的遍歷,圖的搜索)
代碼如下:
import java.util.ArrayList;
import java.util.List;
class Org {
private String id;
private String name;
private String pid;
public Org(String id, String name, String pid) {
this.id = id;
this.name = name;
this.pid = pid;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
@Override
public String toString() {
return "Org [id=" + id + ", name=" + name + ", pid=" + pid + "]";
}
}
public class App {
static void find(ListOrg list, String pid) {
list.stream().filter(p - p.getPid().equals(pid))
.forEach(org - {
System.out.println(org);
find(list, org.getId());
});
}
public static void main(String[] args) {
ListOrg list = new ArrayList();
list.add(new Org("111", "公司", "0"));
list.add(new Org("222", "部門", "111"));
list.add(new Org("333", "小組", "222"));
list.add(new Org("444", "員工1", "333"));
list.add(new Org("555", "員工2", "333"));
find(list, "0");
System.out.println("------------------------------------");
find(list, "111");
}
}
運(yùn)行結(jié)果:
使用遞歸計算5的階乘,遞歸代碼的書寫得找出原問題兩個顯著的特點(diǎn),1.上一層與下一層之間的關(guān)系,或者公式。2.跳出遞歸的條件。
階乘:0!=1,1!=1,2!=1!*2,3!=2!*3,4!=4*3!,5!=5*4!。由這6個式子我們可知,求5的階乘,得求4的階乘,求4的階乘必須先求3的階乘,以此類推。故,什么時候才能停止往下(繼續(xù)往下找呢),我們只0!=1,這就是跳出遞歸的條件,這是固定的。上下層之間的關(guān)系,5!=4!*5,假設(shè)n=5,那么用未知數(shù)可表示n!=(n-1)!*n。具體代碼如下。
public
class
Test
{
public
static
void
main(String[]
args)
{
int
num=fac(5);
System.out.println(num);
}
public
static
int
fac(int
n){
if(n==1){//跳出遞歸的條件:0!=1
return
1;
}else{
int
num=n*fac(n-1);//上下層的關(guān)系:n!=(n-1)!*n
return
num;
}
}