遞迴分類詳解

2021-09-27 03:51:12 字數 1069 閱讀 1002

本文將詳細介紹在c++中的遞迴.

定義:遞迴是乙個函式呼叫它自身的過程,但由於可能會有無限次的呼叫,棧可能會溢位,所以遞迴必須要有終止條件.

在c++中,遞迴分為兩種型別:

每一種分類可以細分為以下5種型別

該遞迴最常用,它通過一種簡單的方式呼叫自己,並通過乙個終止條件終止自身.這個呼叫過程稱之為「纏繞(winding)」,當函式返回給呼叫者時稱之為「解除纏繞(un-winding)」。遞迴終止條件是我們已知的基礎條件.

例子:計算階乘

int fact(long n)

}

二分遞迴是乙個函式一次呼叫兩次而不是一次呼叫一次的過程。

它主要用於資料結構中,如樹的遍歷、查詢高度、合併等操作。

例子:斐波那契數列

int fibnum(int n)

函式相互呼叫。

假設funa呼叫funb, funb遞迴呼叫funa。

這實際上不是遞迴的,但它和遞迴是一樣的。

所以你可以說不支援遞迴呼叫的程式語言,相互遞迴可以應用在那裡來滿足遞迴的要求。

基本條件可以應用於任意乙個或多個函式或所有函式。

例子:判斷偶數或者奇數

bool isoddnumber(int n)

bool isevennumber(int n)

它和所有遞迴非常不同。

除巢狀遞迴外,所有遞迴都可以轉換為迭代(迴圈)。

你可以通過阿克曼函式的例子來理解這個遞迴。

int ackermann(int x, int y)

// error handling condition

if (x < 0 || y < 0)

// recursive call by linear method

else if (x > 0 && 0 == y)

// recursive call by nested method

else

}

無限分類 遞迴

在所有欄目 地區等 下拉列表中,這個類非常好用。具有這個結構的陣列,不是這樣的話,可以改類的實現 list array 1 array id 1 pid 0,name 一級欄目一 2 array id 2 pid 0,name 一級欄目二 3 array id 3 pid 1,name 二級欄目一 ...

無限極分類,遞迴分類

有一組陣列如下 items array 1 array id 1,pid 0,name 江西省 2 array id 2,pid 0,name 黑龍江省 3 array id 3,pid 1,name 南昌市 4 array id 4,pid 2,name 哈爾濱市 5 array id 5,pid...

thinkphp無限遞迴查詢分類

遍歷父id下所有資料 function getson parent id 0,t 1 return temp if session uid 1 if empty data return temp 看上面的while迴圈,當while迴圈完成以後,告訴我 data這個二維陣列裡面存的是什麼?當然是乙個...