1樓:匿名使用者
程式呼叫自身的程式設計技巧稱為遞迴
一個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。遞迴的能力在於用有限的語句來定義物件的無限集合。一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。
當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。
2樓:匿名使用者
程式呼叫自身的程式設計技巧稱為遞迴( recursion)。 一個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。遞迴的能力在於用有限的語句來定義物件的無限集合。
3樓:匿名使用者
遞迴,樓上的兩個人文字解釋的很好了!
我給你個小程式,你看看,理解一下就可以明白了!
這個事求階乘的遞迴(很經典的,很多書中都會有的!)#include "stdio.h"
int fun(int n)
main()
4樓:
自己呼叫自己,直到滿足退出條件
5樓:匿名使用者
就是鏡子裡面你在照鏡子
但是要有結束條件
遞迴是什麼意思?
6樓:小小歐平兒
程式呼叫自身的程式設計技巧稱為遞迴( recursion)。
構成遞迴需具備的條件有:
1、子問題須與原始問題為同樣的事,且更為簡單。
2、不能無限制地呼叫本身,須有個出口,化簡為非遞迴狀況處理。
遞迴做為一種演算法在程式設計語言中廣泛應用。 一個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。
7樓:百度文庫精選
內容來自使用者:nhz312
如果一個物件部分地由自己組成,或者是按它自已定義的,則稱為是遞迴的。遞迴不僅在數學中會遇到,在日常生活中也可以遇到。請看下面的**:
直接或間接地呼叫自身的演算法稱為遞迴演算法。
用函式自身給出定義的函式稱為遞迴函式。
在計算機演算法設計與分析中,遞迴技術是十分有用的。使用遞迴技術往往使函式的定義的演算法的描述簡潔且易於理解。有些資料結構如二叉樹等,由於其本身固有的遞迴特性,特別適合用遞迴的形式來描述。
另外,還有一些問題,雖然其本身並沒有明顯的遞迴結構,但用遞迴技術來求解使設計出的演算法簡潔易懂且易於分析。
遞迴演算法一般用於解決三類問題:
(1)資料的定義形式是按遞迴定義的。這類遞迴問題往往又可轉化成遞推演算法,遞迴邊界作為遞推的邊界條件。
比如階乘的定義:
(式2-1)
又如裴波那契(fibonacci)數列的定義:
(式2-2)
(2)問題解法按遞迴演算法實現。例如回溯等。
(3)資料的結構形式是按遞迴定義的。如樹的遍歷,圖的搜尋等。
遞迴演算法解題通常顯得很簡潔,但遞迴演算法解題的執行效率較低。在遞迴呼叫的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。遞迴次數過多容易造成棧溢位等。
8樓:山間悠客
遞迴是一種重要的程式設計技術。該方法用於讓一個函式從其內部呼叫其自身。一個示例就是計算階乘。
0 的階乘被特別地定義為 1。 更大數的階乘是通過計算 1 * 2 * ...來求得的,每次增加 1,直至達到要計算其階乘的那個數。
下面的段落是用文字定義的計算階乘的一個函式。
「如果這個數小於零,則拒絕接收。如果不是一個整數,則將其向下舍入為相鄰的整數。如果這個數為 0,則其階乘為 1。如果這個數大於 0,則將其與相鄰較小的數的階乘相乘。」
要計算任何大於 0 的數的階乘,至少需要計算一個其他數的階乘。用來實現這個功能的函式就是已經位於其中的函式;該函式在執行當前的這個數之前,必須呼叫它本身來計算相鄰的較小數的階乘。這就是一個遞迴示例。
遞迴和迭代(迴圈)是密切相關的 — 能用遞迴處理的演算法也都可以採用迭代,反之亦然。確定的演算法通常可以用幾種方法實現,您只需選擇最自然貼切的方法,或者您覺得用起來最輕鬆的一種即可。
顯然,這樣有可能會出現問題。可以很容易地建立一個遞迴函式,但該函式不能得到一個確定的結果,並且不能達到一個終點。這樣的遞迴將導致計算機執行一個「無限」迴圈。
下面就是一個示例:在計算階乘的文字描述中遺漏了第一條規則(對負數的處理) ,並試圖計算任何負數的階乘。這將導致失敗,因為按順序計算 -24 的階乘時,首先不得不計算 -25 的階乘;然而這樣又不得不計算 -26 的階乘;如此繼續。
很明顯,這樣永遠也不會到達一個終止點。
因此在設計遞迴函式時應特別仔細。如果懷疑其中存在著無限遞迴的可能,則可以讓該函式記錄它呼叫自身的次數。如果該函式呼叫自身的次數太多,即使您已決定了它應呼叫多少次,就自動退出。
下面仍然是階乘函式,這次是用 jscript **編寫的。
// 計算階乘的函式。如果傳遞了
// 無效的數值(例如小於零),
// 將返回 -1,表明發生了錯誤。若數值有效,
// 把數值轉換為最相近的整數,並
// 返回階乘。
function factorial(anumber)
if (anumber == 0)
else return (anumber * factorial(anumber - 1)); // 否則,遞迴直至完成。}
9樓:安徽新華電腦專修學院
遞迴演算法就是一個函式通過不斷對自己的呼叫而求得最終結果的一種思維巧妙但是開銷很大的演算法。
10樓:匿名使用者
就是自己呼叫自己. 比如我們定義階乘: n的階乘等於n乘以(n-1)的階乘. 這裡在 "n階乘" 的定義裡用到了 "(n-1)階乘", 用階乘來定義階乘, 就是遞迴了
11樓:匿名使用者
遞迴 就是 函式掉用自己或間接的呼叫自己
什麼是遞迴呼叫
12樓:小小歐平兒
遞迴呼叫是一種特殊的巢狀呼叫,是某個函式呼叫自己或者是呼叫其他函式後再次呼叫自己的,只要函式之間互相呼叫能產生迴圈的則一定是遞迴呼叫,遞迴呼叫一種解決方案,一種是邏輯思想,將一個大工作分為逐漸減小的小工作。
遞迴函式特點:
1、函式要直接或間接呼叫自身。
2、要有遞迴終止條件檢查,即遞迴終止的條件被滿足後,則不再呼叫自身函式。
3、如果不滿足遞迴終止的條件,則呼叫涉及遞迴呼叫的表示式。在呼叫函式自身時,有關終止條件的引數要發生變化,而且需向遞迴終止的方向變化。
13樓:匿名使用者
簡單的來說就是自己調自己。
比如斐波那列數的問題:1,1,2,3,5 ……即一個數等於它前兩個數之和,就可以這樣做
int fun(n)
在fun內,呼叫fun自身。遞迴必須有終點,不能無限制的調下去,否則會棧溢位。
14樓:歪生
樓上說得好,就是自己呼叫自己,提高子函式的**利用率!!
15樓:匿名使用者
在函式的內部呼叫函式本身
16樓:匿名使用者
遞迴就是函式呼叫函式本身,例如:
function recursion(i)}
什麼是遞迴函式? 怎樣實現遞迴?
17樓:假面
遞迴就是一個函式在它的函式體內呼叫它自身。執行遞迴函式將反覆呼叫其自身,每呼叫一次就進入新的一層。遞迴函式必須有結束條件。
當函式在一直遞推,直到遇到牆後返回,這個牆就是結束條件。
所以遞迴要有兩個要素,結束條件與遞推關係。
遞迴有兩個基本要素:
(1)邊界條件:確定遞迴到何時終止,也稱為遞迴出口。
(2)遞迴模式:大問題是如何分解為小問題的,也稱為遞迴體。遞迴函式只有具備了這兩個要素,才能在有限次計算後得出結果
在遞迴函式中,呼叫函式和被呼叫函式是同一個函式,需要注意的是遞迴函式的呼叫層次,如果把呼叫遞迴函式的主函式稱為第0層,進入函式後,首次遞迴呼叫自身稱為第1層呼叫;從第i層遞迴呼叫自身稱為第i+1層。反之,退出第i+1層呼叫應該返回第i層。
一個遞迴函式的呼叫過程類似於多個函式的巢狀的呼叫,只不過呼叫函式和被呼叫函式是同一個函式。為了保證遞迴函式的正確執行,系統需設立一個工作棧。具體地說,遞迴呼叫的內部執行過程如下:
(1)運動開始時,首先為遞迴呼叫建立一個工作棧,其結構包括值參、區域性變數和返回地址;
(2)每次執行遞迴呼叫之前,把遞迴函式的值參和區域性變數的當前值以及呼叫後的返回地址壓棧;
(3)每次遞迴呼叫結束後,將棧頂元
18樓:
遞迴就是本身呼叫自己。
如n!=n(n-1)!
你定義函式f(n)=nf(n-1)
而f(n-1)又是這個定義的函式。。這就是遞迴。
實現遞迴。簡單說來從未知的推到已知的
如:3!=3*2!
2!=2*1!
1!=1(已知的)
然後從已知再返**用給上一層。到你所要求的1!=1(已知)
2!=2*1!=2*1=2
3!=3*2!=3*2=6
遞迴結束
19樓:麥香甜甜圈
比方說有一個函式叫max,它有兩個引數,它的功能是求兩個引數中較大的那個數。
例如:a=2,b=4, 則max(a,b)的值是4.
若現在有四個數a,b,c,d,利用max函式求出其中最大的數,怎麼寫呢?顯然有很多方法,像是:max(max(a,b),max(c,d))
max(max(max(a,b),c),d)不知道這個例子能否幫助你理解「遞迴」?
20樓:痕水月
遞迴函式的就是從一個作業的,然後歸到一個男生,然後實現遞迴需要一些特殊條件。
什麼是遞迴演算法?有什麼作用?
21樓:匿名使用者
我感覺遞迴較接近思維的方式,用於解一些光用迴圈解起來較複雜的問題例1.階乘(算比較有特點的了)
計算x!
一般迴圈就是
int multi = 1;
if (x <=1) return (1);
for(int i=1;i<=x;i++)multi = multi*i;
return(multi);
遞迴把x!看作x*(x-1)!
int multi(int x)
這樣就能把x!算出來
例2 最著名的就是漢諾塔了
你可以網上找點資料看看
c語言什麼是遞迴方法?
22樓:千鋒教育
簡單來說就是一個函式呼叫到了自己,就可以稱為遞迴.下面是簡單的求n!的例子:
#include
#include
int fac(int n)
void main()
23樓:匿名使用者
你把你的函式拆開看,比如,你求5的階乘,那麼你把那個函式,看成多個,你複製出來 func_1至func_n;然後呼叫的時候第i個函式,呼叫第i+1個函式.這相可以實現同樣的功能.
其實遞迴就相當於這多個函式,只是呼叫的時候,都是呼叫它自己,這個時候,就把函式本身看成一個新的函式.直到函式返回.
請問什么叫素描,什么叫速寫,請問什麼叫素描,什麼叫速寫?
在國外是沒有區別的 只有到了中國才分出了速寫 你去看看大師的素描集 或是封面上所謂的大師速寫集 你能看出有什麼區別嗎 素描是指畫物體,速寫是指畫人物 其實沒有特別明顯的區分。素描 速寫 什麼叫素描 什麼叫速寫?由木炭,鉛筆,鋼筆等,以線條來畫出物象明暗的單色畫,稱作素描 一般用鉛筆 速寫就是用筆快速...
什么叫厭氧菌,什麼叫厭氧菌
厭氧菌尚無公認的確切定義,但通常認為這是一類只能在低氧分壓的條件下生長,而不能在空氣 18 氧氣 和 或 10 二氧化碳濃度下的固體培養基表面生長的細菌。按其對氧的耐受程度的不同,可分為專性厭氧菌 微需氧厭氧菌和兼性厭氧菌。厭氧菌 anaerobicbacteria 是一類在無氧條件下比在有氧環境中...
什么叫愛情,什麼叫愛情???
就是用心感受。愛是一種責任,是兩個人之間的責任,一種不可以逃避而且男人必須去面對和勇敢去承擔起來的責任。男人如果真的是擁有愛情的話那男人就應該去勇敢的堅強的承擔起男人應該承擔的責任,因為在男人愛對方的時候我也要保護她,男人在接受她的時候男人不僅僅是接受她的好也要接受她的壞,不要因為她的不好的話男人就...