1樓:網友
由於遞迴的呼叫是層層巢狀的,所以用return返回時需要一層一層逐級向上返回。換句話說,在return之後,只能確保截斷當前層的迴圈,不能終止遞迴迴圈。因主它返回到上一層之後還要在上一層上沿其它「分枝」(樹的節點)繼續往下遞迴。
示例:/功能:陣列元素全排列。
引數pre:陣列型,初始為空,用來存放結果。
引數nex:陣列型,初始為原始陣列。
function arr_all(pre:array,nex:array) {
varj:uint=;
if (j==1) {滿足設定的條件後,var t=for (vari:uint=0; i<>
2樓:花開31057鬥淘
所謂的遞迴就是函式自己呼叫自己,於是便構成了迴圈。既然是迴圈,就必須給定乙個限制條件,否則遞迴將無限下去,形成死迴圈。所以使用遞迴迴圈的時候,乙個很重要的事情就是正確設定退出條件!
問題是中途強行退出遞迴迴圈困擾了很多人,正如一位學員所言:「不是不想出來,而是出不來!」
最近我做教程《智慧24點》小遊戲時,寫了乙個遞迴函式,用來對四個資料進行全排列,每在乙個迴圈層上做出乙個排列就嘗試四則運算,如果結果等於24,就從遞迴的這一層上直接返回到呼叫它的主程式裡,而不是用return返回遞迴的上一層繼續遞迴下去。因為只需要知道這個四個資料能(找乙個需要的結論即可)或者不能(遍歷後沒有需要的結論)組成結果等於24的算式就足夠了。<>
遞迴函式中return true,是跳出這一層遞迴還是跳出整個遞迴?貌似是整個遞迴的樣子。
3樓:墨汁諾
void function(int n)
function(n-1);
cout<<"n="<}
如果你呼叫funcion(5);它的輸出將會是1234
5可以看出它的執行順序是。
function(1),從這return 掉,跳出遞迴,依次執行前面已遞迴的部分。
function(2),function(3),function(4),function(5),bool function(int n)
elseif( n%2 ==0 )
elsereturn就是返回函式值 不過函式定義成void 沒有返回語句return也可以 這裡的return只是起到了結束函式的遞迴而已。
break和continue都是迴圈體內部語句,有阻止和跳過的功能,但權力有限,只對迴圈體起作用,而對函式體無可奈何。所以強制退出遞迴迴圈正宗的,標準的方法是:使用(外部變數isgo ) 返回語句return)。
4樓:網友
return true的含義就是「結束當前這個函式」,僅此而已。之後程式就會回到之前的呼叫點的下一步開始繼續執行。你所說的」跳出這一層遞迴還是跳出整個遞迴「只是由你自己程式的寫法決定的,具體需要幾自己判斷。
例如fa(n)
這樣的話函式不管幾次呼叫,顯然在執行了return true後就結束了,因為每次返回的位置永遠都是1這裡,而這裡沒有**!所以return true只被執行了一次。
fa(n)這裡看起來結果是一樣的,不過其實每次遞迴呼叫都是執行了一遍return true!
c語言怎樣理解遞迴啊?如果有乙個函式呼叫兩個自己,我一層一層套著想糾結了?
5樓:時歡悅
遞迴必須要有退出條件,像你**這樣是不行的,必然會死遞迴的。
void listbtnode(btnode *t)
6樓:邊餓期忘桂
迴圈與遞迴的本質區別在於記憶體的使用上,遞迴是方法呼叫方法本身,而隨著遞迴的次數的增加,記憶體的消耗也是不斷增長,而在我們寫**時,記憶體是乙個很重要的部分,我們儘量都是減少記憶體的消耗,以免造成對系統資源的浪費,迴圈佔用的記憶體很少,每次迴圈都會釋放之前分配的記憶體,但是很多遞迴的功能是不能用迴圈實現的,這就要考慮你要實現的功能了,如果非遞迴不可完成的功能,我們也不會刻意更改。
個遞迴一層層遞迴下去後,後面的兩個函式怎麼執行的
7樓:網友
可以這麼理解,最外面的是chaild_sort0,chaild_sort0裡面的2個為chaild_sort00和chaild_sort01,chaild_sort00裡面的2個是chaild_sort000和chaild_sort001,chaild_sort01裡面的2個是chaild_sort010和chaild_sort011,這樣一直下去直到s=t。
簡單看一下3層的話,執行的順序是chaild_sort0 ->chaild_sort00 ->chaild_sort000 ->s==t退出" -chaild_sort001 ->s==t退出" -chaild_sort00退出」->chaild_sort01 ->chaild_sort010 ->s==t退出"--chaild_sort011 ->s==t退出" -chaild_sort01退出」 -chaild_sort0退出」
形象一點虛悔的話,就類似於windows的資源管理器。
先開啟我的電腦,然後開c盤。
然後開啟c盤中的資料夾。
a,a中空了,回退,再開c中的檔案差野正夾b,b也空了,回退,c中也沒其他資料夾了,就退出c,進入d,在d中發生了和c盤差不多的過程,然後退到我的電腦,最後我的電腦退回桌面。
遞迴的話,主要是確定原問題與子問題的結構,只有原問題和子脊迅問題的結構一致才好遞迴。
歸併的結構是2個有序的陣列,通過前端比較,能合併成1個更長的陣列。而那2個有序的陣列,也可以分別用這種方法得到。所以相同的結構就是(1)得到有序陣列a(2)得到有序陣列b(3)合併這2個陣列。
**就是這個意思,並且遞迴的目的就是為了讓**更易於理解。
php 遞迴函式若不滿足條件則終止本函式的自呼叫,然後把目前流程的主控權交回給上一層函式來執行?
8樓:網友
function s(){//這個相對於裡面的s()就叫上一層。
s();
當函式發生遞迴呼叫時,同乙個區域性變數在不同程度上可以同時存在不同的取值,這在底層是如何做到的?
9樓:網友
你在源**中看到的乙個區域性變數,禪譽褲其實在函式遞迴過程中是存在很多副本的。
比如,你在源**中看到乙個乙個區域性變數 a
其實在函式遞迴掉用的時候,每呼叫一次都會在所呼叫函式的執行空間裡虛乎儲存乙個a的,所以其實存在很多很多的不同的a,他們各自的儲存空間是不一樣的,當然能儲存不同的取值了。
如。開始呼叫t(),先為t()分配儲存空間,儲存空裡有乙個a
然後t()呼叫t()(我們稱之為t1())先為t1()分配儲存空間,儲存空間裡有存乙個a(與前面的a是不同的)
t1()又呼叫t()(我們稱之為t2())先為t2分配儲存空間,儲存空間裡存乙個a(又是乙個不同的a)
.以此類推。
所以,並不是「同乙個區域性變數在不同程度上可以同時存在不同的取值」
而是「不同的區域性變數在不同賀簡的函式空間裡儲存了不同的值」
請問有使用過db2儲存過程的嗎? 我想在儲存過程中加入遞迴查詢語句,遞迴查詢語句外面巢狀著另一層查詢
10樓:雪漫山
儲存過程中可以使用with,不能使用的是with外面再巢狀select,這種寫法即時單純的執行也不行的。你可以將with的結果放入臨時表中再進行其他操作。
誰能夠解釋一下遞迴的本質!以及如何使用遞迴!
11樓:網友
函式的遞迴呼叫。
乙個函式在它的函式體內呼叫它自身稱為遞迴呼叫。這種函式稱為遞迴函式。c語言允許函式的遞迴呼叫。
在遞迴呼叫中,主調函式又是被調函式。執行遞迴函式將反覆呼叫其自身,每呼叫一次就進入新的一層。
例如有函式f如下:
int f(int x)
這個函式是乙個遞迴函式。但是執行該函式將無休止地呼叫其自身,這當然是不正確的。為了防止遞迴呼叫無終止地進行,必須在函式內有終止遞迴呼叫的手段。
常用的辦法是加條件判斷,滿足某種條件後就不再作遞迴呼叫,然後逐層返回。下面舉例說明遞迴呼叫的執行過程。
例】用遞迴法計算n!
用遞迴法計算n!可用下述公式表示:
n!=1 (n=0,1)
n×(n-1)! n>1)
按公式可程式設計如下:
long ff(int n)
main()
程式中給出的函式ff是乙個遞迴函式。主函式呼叫ff 後即進入函式ff執行,如果n<0,n==0或n=1時都將結束函式的執行,否則就遞迴呼叫ff函式自身。由於每次遞迴呼叫的實參為n-1,即把n-1的值賦予形參n,最後當n-1的值為1時再作遞迴呼叫,形參n的值也為1,將使遞迴終止。
然後可逐層退回。
下面我們再舉例說明該過程。設執行本程式時輸入為5,即求5!。在主函式中的呼叫語句即為y=ff(5),進入ff函式後,由於n=5,不等於0或1,故應執行f=ff(n-1)*n,即f=ff(5-1)*5。
該語句對ff作遞迴呼叫即ff(4)。
進行四次遞迴呼叫後,ff函式形參取得的值變為1,故不再繼續遞迴呼叫而開始逐層返回主調函式。ff(1)的函式返回值為1,ff(2)的返回值為1*2=2,ff(3)的返回值為2*3=6,ff(4)的返回值為6*4=24,最後返回值ff(5)為24*5=120。
基礎層是不是負一層,基礎層是不是負一層知識
不是,在建築專業中,基礎層指的是基礎墊層上表面至正負零之間的基礎。如果建築首層稱為第一層的話,第 1層是地下室的第一層,那麼基礎層便是地下室底板以下基礎墊層以上部分。基礎層又泛指為數眾多 地位較低的人 種 群,區別於領導層。這部分人雖然對決策沒有決定權,但是卻是對領導層的決策最有力的執行者。就像建築...
彩鋼瓦是不是就是上面一層鐵中間一層泡沫下面一層鐵啊!那樣的房頂夏天熱嗎
不一定啊 要看你用的複合板的質量了 用好一點的 不會熱 你是當然。不是熱。而是很熱 不會熱的 要看室外溫度 彩鋼瓦是和石棉瓦差不多的那種鐵皮瓦 上面一層鐵中間一層泡沫下面一層鐵的那叫彩鋼複合保溫板。夏天會很熱的,要看厚度和質量的好壞了。保溫性很好。夏天熱。冬天暖和 房頂現在就一層鐵皮 上面是加一層鐵...
咸陽機場T2二層如何直接到達T2一層
咸陽機場t2二層有自動扶梯和電梯,可以直接到達t2一層 咸陽機場 t3怎麼去t2 中間有1個半小時 時間夠嗎 咸陽國際機場t2 t3航站樓之間有擺渡車往返接送旅客,出站後即可免費乘坐擺渡車專抵達。t2 t3航站屬 樓之間有人行長廊通道。步行走不到10分鐘。以下是兩個航站樓的位置分佈圖。西安咸陽國際機...