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)資料的結構形式是按遞迴定義的。
什麼是遞迴函式?怎樣實現遞迴,遞迴函式F n 的遞迴演算法是什麼
假面 遞迴就是一個函式在它的函式體內呼叫它自身。執行遞迴函式將反覆呼叫其自身,每呼叫一次就進入新的一層。遞迴函式必須有結束條件。當函式在一直遞推,直到遇到牆後返回,這個牆就是結束條件。所以遞迴要有兩個要素,結束條件與遞推關係。遞迴有兩個基本要素 1 邊界條件 確定遞迴到何時終止,也稱為遞迴出口。2 ...
遞迴呼叫一題目C C中關於遞迴呼叫的問題
不用遞迴吧。這個問題很好解決啊。for int n 0 n 1000 n 答案是31 using system using using namespace consoleapplication1public static int find int s while f i return i 1 sta...
C 的遞迴函式問題
假設s裡有個兩字元吧,當第一次呼叫reverse s 時,判斷 s是否為空,即s裡的第一個字元是否存在,如果有的話,就呼叫reverse s 1 即對s裡的第二個字元進行判斷。不為空,就再呼叫,對下一個進行判斷,因為s裡只有兩個字元,所以在第三次呼叫時,直接返回。返回到reverse s 1 中,之...