逐句解釋乙個遞迴,如何理解遞迴?

2025-01-08 06:05:28 字數 4670 閱讀 6443

1樓:網友

public class mainclasspublic static void main();呼叫foo函式,引數是30

public static int foo(int i)//foo函式的函式體。

if (i <=0)

return 0;

else if(i > 0 &&i <=2)//i為1和2的時候,返回1

return 1;

else return foo(i -1) +foo(i - 2);

i從3開始,返回值為前2個值相加。

其實就是斐波那契數列。

1 1 2 3 5 8 13 21 ..每個數等於前2個數的和。

2樓:網友

這是用c#寫的。

意為輸出第30個數。

if (i <=0)

return 0; 當i<=0的時候 就返回0 就是說foo(0)=0

else if(i > 0 &&i <=2)

return 1; 當i > 0 &&i <=2的時候 就返回1 就是說foo(1)=1,foo(2)=1

else return foo(i -1) +foo(i - 2);

這裡 我就舉個例子 當i=3 ,foo(3)=foo(2)+foo(1)=2 知道foo(30)

如何理解遞迴?

3樓:網友

遞迴和迭代都是迴圈的一種。

簡單地說,遞迴是重複呼叫函式自身實現迴圈。迭代是函式內某段**實現迴圈,而迭代與普通迴圈的區別是:迴圈**中參與運算的變數同時是儲存結果的變數,當前儲存的結果作為下一次迴圈計算的初始值。

遞迴迴圈中,遇到滿足終止條件的情況時逐層返回來結束。迭代則使用計數器結束迴圈。當然很多情況都是多種迴圈混合採用,這要根據具體需求。

遞迴的例子,比如給定乙個整數陣列,採用折半查詢返回指定值在陣列中的索引,假設陣列已排序,為方便描述,假設元素都為正數,陣列長度為2的整數倍。

折半查詢是查詢的一種,比遍歷所有元素要快很多。

int find(int *ary,int index,int len,int value)

if(len==1)//最後乙個元素。

if (ary[index]==value)return index;//成功查詢返回索引。

return -1;//失敗,返回-1

如果長度大於1,進行折半遞迴查詢。

int half=len/2;

檢查被查值是否大於上半部分最後乙個值,如果是則遞迴查詢後半部分。

if(value>ary[index+half-1])

return find(ary,index+half,half,value);

否則遞迴查詢上半部分。

return find(ary,index,half,value);

迭代經典例子就是實數的累加,比如計算1-100所有實數的和。

int v=1;

for(i=2;i<=100;i++)

v=v+i;

遞迴的原理解釋

4樓:科學普及交流

遞迴,是函式實現的乙個很重要的環節,很多程式中都或多或少的使用了遞迴函式。遞迴的意思就是函式自己呼叫自己本身,或者在自己函式呼叫的下級函式中呼叫自己。

遞迴之所以能實現,是因為函式的每個執行過程都在棧中有自己的形參和區域性變數的拷貝,這些拷貝和函式的其他執行過程毫不相干。這種機制是當代大多數程式設計語言實現子程式結構的基礎,是使得遞迴成為可能。假定某個呼叫函式呼叫了乙個被呼叫函式,再假定被呼叫函式又反過來呼叫了呼叫函式。

這第二個呼叫就被稱為呼叫函式的遞迴,因為它發生在呼叫函式的當前執行過程執行完畢之前。而且,因為這個原先的呼叫函式、現在的被呼叫函式在棧中較低的位置有它獨立的一組引數和自變數,原先的引數和變數將不受影響,所以遞迴能正常工作。程式遍歷執行這些函式的過程就被稱為遞迴下降。

程式設計師需保證遞迴函式不會隨意改變靜態變數和全域性變數的值,以避免在遞迴下降過程中的上層函式出錯。程式設計師還必須確保有乙個終止條件來結束遞迴下降過程,並且返回到頂層。

5樓:匿名使用者

遞迴做為一種演算法在程式設計語言中廣泛應用。是指函式/過程/子程式在執行過程式中直接或間接呼叫自身而產生的重入現像。 程式呼叫自身的程式設計技巧稱為遞迴( recursion)。

乙個過程或函式在其定義或說明中又直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。遞迴的能力在於用有限的語句來定義物件的無限集合。用遞迴思想寫出的程式往往十分簡潔易懂。

一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。 注意:

1) 遞迴就是在過程或函式里呼叫自身; (2) 在使用遞增歸策略時,必須有乙個明確的遞迴結束條件,稱為遞迴出口。 遞迴演算法一般用於解決三類問題: (1)資料的定義是按遞迴定義的。

fibonacci函式) (2)問題解法按遞迴演算法實現。(回溯) (3)資料的結構形式是按遞迴定義的。(樹的遍歷,圖的搜尋) 遞迴的缺點:

遞迴演算法解題的執行效率較低。在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。遞迴次數過多容易造成棧溢位等。

原理及詳解。

遞迴的概念

6樓:封琴瑟煙雨冢

​是指函式/過程/子程式在執行過程式中直接或間接呼叫自身而產生的重入現象。

在計算機程式設計裡,遞迴指的是乙個過程:函式不斷引用自身,直到引用的物件已知。

使用遞迴解決問題,思路清晰,**少。但是在主流高階語言中(如c語言、pascal語言等)使用遞迴演算法要耗用更多的棧空間,所以在堆疊尺寸受限制時(如嵌入式系統或者核心態程式設計),應避免採用。所有的遞迴演算法都可以改寫成與之等價的非遞迴演算法。

漢諾塔問題,是常見可用遞迴解決的問題,不過也有非遞迴的解法。

菲波納契數列可用遞迴定義。

以下為求漢諾塔問題的pascal程式:

procedure hanoi(n:integer;x,y,z:char);

遞迴。begin

if n<>1 then begin

hanoi(n-1,x,z,y);

writeln(x,n,z);

hanoi(n-1,y,x,z);

else writeln(x,n,z);

end;end;

上述程式用接近自然語言的偽**可表述如下:

hanoi 過程 (整型引數n; 字元型引數 x,y,z);

注:n 代表本步中要處理的盤子數,x,y,z 分別表示 n 號盤子原來所在柱子、經由柱子、目標柱子。

開始。如果 n 不為 1 ,那麼:開始。

呼叫 hanoi 過程 (引數為 n-1,x,z,y);

注:這一步表示用本過程方法將剩餘 n-1 個盤子從柱子 x 經由柱子 z 移動到柱子 y

輸出 x,n,z; /注:表示將 n 號盤子從 x 移動到 z

呼叫 hanoi 過程 (引數為 n-1,y,x,z);

注:這一步表示用本過程方法將剩餘 n-1 個盤子從柱子 y 經由柱子 x 移動到柱子 z

結束; /以上程式段就完成了把 n 個盤子從柱子 x 經由柱子 y 移動到柱子 z

否則 輸出 x,n,z; /注:若 n 為1 的話本句直接輸出表示將 n 號盤子從 x 移動到 z

遞迴,就是在執行的過程中呼叫自己。

構成遞迴需具備的條件:

函式巢狀呼叫過程示例。

1. 子問題須與原始問題為同樣的事,且更為簡單;

2. 不能無限制地呼叫本身,須有個出口,化簡為非遞迴狀況處理。

在數學和電腦科學中,遞迴指由一種(或多種)簡單的基本情況定義的一類物件或方法,並規定其他所有情況都能被還原為其基本情況。

能解釋一下什麼是遞迴嗎?

7樓:匿名使用者

當某一問題可以表現為範圍縮小的同性質問題的疊加,且利用範圍縮小的問題的結果比較容易推匯出最後解答的情況時,可以使用遞迴演算法。這樣乙個問題的解答將依賴與乙個同性質問題的解答,而解答這個同性質的問題實際上就是用不同的引數(體現範圍縮小)來呼叫遞迴方法自身。

所有的遞迴演算法都可以用條件-迴圈改寫成非遞迴的形式,所以沒有什麼場合是一定要使用遞迴的。

遞迴的基本思想就是「自己呼叫自己」,乙個使用遞迴技術的方法即是直接或間接的呼叫自身的方法。遞迴可以用簡單的程式來解決某些複雜的計算問題,但是遞迴呼叫會佔用大量的系統堆疊,記憶體耗用多,計算量大,在遞迴呼叫層次較多時使用要慎重。

8樓:匿名使用者

一種用歸納方法給定的數列。例如,等比數列可以用歸納方法來定義,先定義第一項 a1 的值( a1 ≠ 0 ),對 於以後的項 ,用遞推公式an+1=qan (q≠0,n=1,2,…)給出定義。一般地,遞迴數列的前k項a1,a2,…,ak為已知數,從第k+1項起,由某一遞推公式an+k=f(an,an+1,…,an+k-1) (n=1,2,…)所確定。

k稱為遞迴數列的階數。例如 ,已知 a1=1,a2=1,其餘各項由公式an+1=an+an-1(n=2,3,…)給定的數列是二階遞迴數列。這是斐波那契數列,各項依次為 1 ,1 ,2 ,3,5 ,8 ,13 ,21 ,…同樣 ,由遞迴式an+1-an =an-an-1( a1,a2 為已知,n=2,3,… 給定的數列,也是二階遞迴數列,這是等差數列。

有人能幫我解釋一下什麼是遞迴法嗎

遞迴是設計和來描述演算法的一種有力源的工具,由於bai它在du複雜演算法的描述zhi中被經常採用,為此在dao進一步介紹其他演算法設計方法之前先討論它。能採用遞迴描述的演算法通常有這樣的特徵 為求解規模為n的問題,設法將它分解成規模較小的問題,然後從這些小問題的解方便地構造出大問題的解,並且這些規模...

一個數學題目理解,解釋一個數學題?

就是說甲閱覽室的科技類書籍的數量乘以1 5 和乙閱覽室的科技類書籍的數量乘以1 4的數量是相等的。第二句也是一樣的意思。這個題常規思維即可。答案為 設甲閱覽室中科技書為x本,文化書為y本。則 x y 20 1 x y 解方程即可。用假設法可以更簡單的理解。假設甲閱覽室科技類書籍數量為5,那麼乙就是4...

如何理解市場營銷既是乙個決策和又是乙個管理的過程 5

如何理解市場營銷既是乙個決策和又是乙個管理的過程 一 企業市場營銷管理過程的四個步驟。企業市場營銷管理的過程的四個步驟是 分析市場機會。 選擇目標市場。 設計營銷組合。 管理營銷活動。教材上將這一過程概括為五個步驟,筆者認為第。四 五個步驟可以概括為管理營銷活動,因為計劃 組織 控制等本身都是管理的...