1樓:聲琨
遞迴是一種重要的程式設計技術。該方法用於讓一個函式從其內部呼叫其自身。一個示例就是計算階乘。
0 的階乘被特別地定義為 1。 更大數的階乘是通過計算 1 * 2 * ...來求得的,每次增加 1,直至達到要計算其階乘的那個數。
下面的段落是用文字定義的計算階乘的一個函式。
“如果這個數小於零,則拒絕接收。如果不是一個整數,則將其向下舍入為相鄰的整數。如果這個數為 0,則其階乘為 1。如果這個數大於 0,則將其與相鄰較小的數的階乘相乘。”
要計算任何大於 0 的數的階乘,至少需要計算一個其他數的階乘。用來實現這個功能的函式就是已經位於其中的函式;該函式在執行當前的這個數之前,必須呼叫它本身來計算相鄰的較小數的階乘。這就是一個遞迴示例。
遞迴和迭代(迴圈)是密切相關的 — 能用遞迴處理的演算法也都可以採用迭代,反之亦然。確定的演算法通常可以用幾種方法實現,您只需選擇最自然貼切的方法,或者您覺得用起來最輕鬆的一種即可。
顯然,這樣有可能會出現問題。可以很容易地建立一個遞迴函式,但該函式不能得到一個確定的結果,並且不能達到一個終點。這樣的遞迴將導致計算機執行一個“無限”迴圈。
下面就是一個示例:在計算階乘的文字描述中遺漏了第一條規則(對負數的處理) ,並試圖計算任何負數的階乘。這將導致失敗,因為按順序計算 -24 的階乘時,首先不得不計算 -25 的階乘;然而這樣又不得不計算 -26 的階乘;如此繼續。
很明顯,這樣永遠也不會到達一個終止點。
因此在設計遞迴函式時應特別仔細。如果懷疑其中存在著無限遞迴的可能,則可以讓該函式記錄它呼叫自身的次數。如果該函式呼叫自身的次數太多,即使您已決定了它應呼叫多少次,就自動退出。
所以你說的那個不是遞迴,頂多能算作遞推或迭代
int sum(int value)
main()
上面這才是遞迴
2樓:匿名使用者
1至100的和這個程式需要迴圈求sum=sum+i(i每次自增1)。沒有用到遞迴,
1至100的和累積求值,遞迴呼叫是一個迴圈程式的呼叫
sum=sum+i只是c語言的一個實現的函式語句!
遞迴的基本概念和特點
程式呼叫自身的程式設計技巧稱為遞迴( recursion)。
一個過程或函式在其定義或說明中又直接或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。遞迴的能力在於用有限的語句來定義物件的無限集合。用遞迴思想寫出的程式往往十分簡潔易懂。
一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。
注意:(1) 遞迴就是在過程或函式裡呼叫自身;
(2) 在使用遞增歸策略時,必須有一個明確的遞迴結束條件,稱為遞迴出口。
3樓:
這個是累積求值而已,如果要遞迴的話,需要有自呼叫的過程。
4樓:
樓上的把概念分析的很透徹,也區分了和遞推或迭代的區別.你用的是迭代.我順便說一下!
(引用一下樓上的)注意:
(1) 遞迴就是在過程或函式裡呼叫自身;
(2) 在使用遞增歸策略時,必須有一個明確的遞迴結束條件,稱為遞迴出口。
舉幾個例子吧!
1+2+3+...100
要求這個方法很多.用遞迴理解:
假設s100表示求1~100的和,s99表示1~99的和,s(n)就是1~n的和
遞迴表示為:s100=s99+100; s99=s98+99 依次類推,s(n)=s(n-1)+n;當然不能一直加,總有個界限,就是s0=0(s1=1也行);對於樓上用的函式int sum(int value)種,就是這麼理解的:
階乘一樣
s7=s6*7 s6=s5*6 s(n)=s(n-1)*n s(1)=1(或者s0=1)
程式如下:
int fac(int value)
main()
5樓:愛荷珠
遞迴演算法是一種直接或者間接地呼叫自身演算法的過程。在計算機編寫程式中,遞迴演算法對解決一大類問題是十分有效的,它往往使演算法的描述簡潔而且易於理解。
遞迴演算法解決問題的特點:
(1) 遞迴就是在過程或函式裡呼叫自身。
(2) 在使用遞迴策略時,必須有一個明確的遞迴結束條件,稱為遞迴出口。
(3) 遞迴演算法解題通常顯得很簡潔,但執行效率較低。所以一般不提倡用遞迴演算法設計程式。
(4) 在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。遞迴次數過多容易造成棧溢位等。所以一般不提倡用遞迴演算法設計程式。
什麼是“遞迴”?“遞迴”有什麼用?
6樓:永遠的開心鬼
1、程式呼叫自身的程式設計技巧稱為遞迴。遞迴做為一種演算法在程式設計語言中廣泛應用。 一個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。
遞迴的能力在於用有限的語句來定義物件的無限集合。一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。
2、遞迴一般的作用用於解決三類問題:
(1)資料的定義是按遞迴定義的。(fibonacci函式)(2)問題解法按遞迴演算法實現。
這類問題雖則本身沒有明顯的遞迴結構,但用遞迴求解比迭代求解更簡單,如hanoi問題。
(3)資料的結構形式是按遞迴定義的。
什麼是遞迴呼叫,什麼是遞迴函式? 怎樣實現遞迴?
小小歐平兒 遞迴呼叫是一種特殊的巢狀呼叫,是某個函式呼叫自己或者是呼叫其他函式後再次呼叫自己的,只要函式之間互相呼叫能產生迴圈的則一定是遞迴呼叫,遞迴呼叫一種解決方案,一種是邏輯思想,將一個大工作分為逐漸減小的小工作。遞迴函式特點 1 函式要直接或間接呼叫自身。2 要有遞迴終止條件檢查,即遞迴終止的...
C裡如何使用遞迴演算法?什麼是遞迴啊
遞迴就是反覆呼叫函式自身 有條件的呼叫 但不滿足呼叫自身的條件時,就返回到上一層 當然是和自己一樣的函式,但層次不同 一直返回到第一次呼叫的地方 static void main string args public static int process2 int i 遞迴演算法 是一種直接或者間接...
什麼是遞迴網域名稱
1全部簡單的說就是你在本地網路裡設定的dns網域名稱伺服器。這台網域名稱伺服器會根據你的訪問請求去遞迴的向上級查詢你請求 對應的ip位址,然後反饋回來。想檢視你的遞迴網域名稱伺服器位址,在cmd下輸入ipconfig all,dns那項就是。很多人可能還不知道遞迴網域名稱解析是怎麼一回事?查了一些資...