哪位程式設計高手用例子給我講一下遞迴呼叫!謝謝啦

2021-08-16 20:16:43 字數 2826 閱讀 3507

1樓:砍侃看

你編寫一個函式處理某個問題,在處理問題時發現又遇到了同樣的問題需要呼叫自己處理.比如要遍歷一個目錄下的所有檔案,你要對該目錄下的子目錄和檔案進行處理,在處理子目錄時再次呼叫自己來處理檔案和子目錄

2樓:美圖賞

程式呼叫自身的程式設計技巧稱為遞迴( recursion)。遞迴做為一種演算法在程式設計語言中廣泛應用。 一個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。

遞迴的能力在於用有限的語句來定義物件的無限集合。一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。

例如,下列為某人祖先的遞迴定義:

某人的雙親是他的祖先(基本情況)。某人祖先的雙親同樣是某人的祖先(遞迴步驟)。斐波納契數列(fibonacci sequence),又稱**分割數列,指的是這樣一個數列:

1、1、2、3、5、8、13、21..... i[1]

斐波納契數列是典型的遞迴案例:

fib(0) = 0 [基本情況] fib(1) = 1 [基本情況] 對所有n > 1的整數:fib(n) = (fib(n-1) + fib(n-2)) [遞迴定義] 儘管有許多數學函式均可以遞迴表示,但在實際應用中,遞迴定義的高開銷往往會讓人望而卻步。例如:

階乘(1) = 1 [基本情況] 對所有n > 1的整數:階乘(n) = (n * 階乘(n-1))

[遞迴定義]

一種便於理解的心理模型,是認為遞迴定義對物件的定義是按照「先前定義的」同類物件來定義的。例如:你怎樣才能移動100個箱子?答案:你首先移動一個箱

子,並記下它移動到的位置,然後再去解決較小的問題:你怎樣才能移動99個箱子?最終,你的問題將變為怎樣移動一個箱子,而這是你已經知道該怎麼做的。

如此的定義在數學中十分常見。例如,集合論對自然數的正式定義是:1是一個自然數,每個自然數都有一個後繼,這一個後繼也是自然數。

德羅斯特效應德羅斯特效應是遞迴的一種視覺形式。圖中女性手持的物體中有一幅她本人手持同一物體的小**,進而小**中還有更小的一幅她手持同一物體的**,依此類推。

又例如,我們在兩面相對的鏡子之間放一根正在燃燒的蠟燭,我們會從其中一面鏡子裡看到一根蠟燭,蠟燭後面又有一面鏡子,鏡子裡裡又有一根蠟燭……這也是遞迴的表現。

3樓:匿名使用者

int function(int x)//此遞迴是為了算出1+2+...x的和

void main()

4樓:匿名使用者

這個還是建議你用 dev-c++ 或者 visual c++ 的單步除錯功能來看會比較直觀一些.

劉汝佳的 《演算法競賽入門經典》關於遞迴的教學很不錯,但是我只有pdf版的,你要的話我可以通過郵箱發給你.

誰能幫我分別舉一個例子,是關於函式的巢狀呼叫和遞迴呼叫的(要每一步都詳細解說一下,非常感謝!}

5樓:

譚浩強的書上寫的很詳細,沉下心去讀3遍。

6樓:匿名使用者

利用遞迴將字串倒置

void recur(char *c,int k)}

7樓:匿名使用者

可以這樣來理解,巢狀呼叫是a呼叫b,而遞迴是a呼叫a,即本身。

既然對c函式搞不懂,就先把c學好。

8樓:中北玉龍客

7.5.1 函式巢狀呼叫

函式巢狀呼叫:在被調函式中再呼叫其它函式稱函式巢狀呼叫。

◆ c語言不能巢狀定義函式。

例如:在下列呼叫f1函式中呼叫f2函式。

float f1(int a, int b)

int f2(int x, int y)

呼叫過程如圖7.2所示。

【例7.10】求1k+2k+3k+…+nk的值,假設k為4,n為6。

#include "stdio.h"

void main( )

add(int a,int b) /*該函式功能:進行累加*/

powers(int m, int n) /*該函式功能:進行累乘*/

執行結果為:

2275

7.5.2 函式遞迴呼叫

遞迴呼叫:在呼叫一個函式的過程中直接或間接地呼叫該函式本身,稱為函式的遞迴呼叫。

在編寫遞迴呼叫程式時注意:

(1)遞迴程式演算法:即如何實現其遞迴;

(2)遞迴呼叫的結束條件:避免無止境遞迴呼叫造成死迴圈。所以遞迴呼叫應為條件遞迴呼叫:

if (條件) 遞迴呼叫

else ……

【例7.11】用遞迴演算法程式設計求n!階乘的程式。

從數學可知:n!=1*2*3* … *n,可得:

遞迴呼叫的結束條件:

if( (n==0)|| (n==1)) return(1);

else return(n*fac(n-1)); /* fac(n-1)求(n-1)!函式*/

程式如下:

int fac(int n)

void main( )

執行結果為:

請輸入一個整數:5↙

5!=120

【例7.12】呼叫一個遞迴函式,將一個整數的低位變成高位,高位變成低位組成另一個整數,例如輸入1234得到另一個整數4321。

#include "stdio.h"

int fun(int n, int m)

void main( )

有道數學題請哪位高手用方程式幫我計算一下步驟要詳細我沒積分求幫忙謝謝

設長方體的長 寬 高分別為 x y z 由題意可知 xy xz yz x2 69.72 1式 xy 19 2式 x y 17.6 3式 先由2 3式求得x y再代入1式求z。最後這個長方體的體積就為 xyz。計算就靠你咯。有不懂的可以繼續問哈!高長 高 寬為a b c 2 ab bc ca 69.7...

哪位硬體高手能給我詳細的介紹一下顯示卡

顯示卡的效能評定標準 第一看顯示核心,比如 7600gt 7600gs 7300gt n卡 1950xt 1650xt a卡 第二看核心頻率和視訊記憶體頻率,500mhz 1200mhz 300mhz 800mhz 第三看視訊記憶體標準,gddr3 gddr2 gddr還有視訊記憶體容量和位寬,位寬...

誰能通俗的給我講一下GDP,哪位能通俗的簡單的形象的解釋一下GDP

首先是個地域概念,就是說國人在國外創造的價值不算gdp,國外在國內創造的價值算入gdp。然後就是計入gdp的價值的種類,就是勞務和產品的最終價值。勞務不必多說,最終產品必須說一下。比如農民生產棉花賣10元,棉花織成棉布賣20元,棉布做成棉布衣賣30元,計入gdp的為30元,即農民 棉布廠和製衣廠創造...