1樓:匿名使用者
跟你講講為什麼題目可以用遞迴求,或許你就會明白了,解遞迴題目要嚴格按照譚浩強的思路模式解答,不能靠猜。
如果我求得固定第1位後的排列,那麼全部排列就可以求出,固定第一位有2種可能,首位可以先設為a然後設為b或者反過來都行的。
如果我求得固定第2位後的排列,固定第一位後的排列就可以求出,固定第二位有2種可能。
。。。如果我求得固定第15位後的排列,固定第14位後的排列就可以求出,固定第15位有2種可能。
這很明顯是遞迴的演算法。
int fun(int now,int i,int a,int b)//全部序列
}//篩選結束
str[i-1]='a';//當i為0時,就是首位設為'a'
fun(now*2,i+1,a+1,b);//求得固定i為'a'後的全部序列
str[i-1]='b';////當i為0時,就是首位設為'b'
fun(now-1,i+1,a,b+1); //求得固定i為'b'後的全部序列
//以上步驟完成時,全部序列全部求得。}
2樓:
如果把它當做遍歷來看就很容易理解了。上面的**類似於先序遍歷二叉樹;遇到a字元就遍歷左子樹,且a字元進棧str;遇到b字元就遍歷右子樹,且b字元進棧str,如果左子樹不滿足題目要求則到右子樹去找,此時要先將棧頂的a字元出棧,表示左子樹不滿足條件。如下圖:
函式fun(int now,int i,int a,int b)為遞迴函式,i 引數用來標識當前遞迴深度;str作為棧,用來儲存遍歷的路徑,按照先序遍歷思路,先判斷是否滿足遞迴前提,即if(now<0 || i>16 || (now==0 && i<16))用來判斷當前是否滿足遞迴遍歷前提,不滿足則結束return 0;滿足則先訪問當前樹根節點,即if(now==0)判斷當前酒壺是否沒有酒了,if(i==16 && a==5 && b==10)判斷在沒有酒的大前提下是否恰好是遇到5次店,10次花,是則將str棧中儲存的路徑輸出,如圖中打勾的那個節點。如果now!=0,則說明還沒結束,此時當前樹根節點不是最終結果,則繼續按照先序遍歷思路,將要去訪問其左子樹(看看左子樹是否有滿足條件的答案),所以就要將a字元進棧,str[i-1]='a';用來儲存路徑;fun(now*2,i+1,a+1,b);則是開始遞迴進入左子樹,傳參遇店酒加一倍(now*2),遞迴深度i要加1層,a+1表示遇到店一次。
左子樹遞迴結束後就到右子樹了,所以str[i-1]='b';表示之前的棧頂a字元退棧,b字元進棧;接著進入右子樹fun(now-1,i+1,a,b+1);到此則整個遞迴結束。
求大佬詳細給我解釋一下遞迴
3樓:陳釗翔
遞迴就是函式自己呼叫自己
4樓:匿名使用者
遞迴簡單的講是來
沒法講比如自說在return返回值裡bai呼叫了兩次本du函式,那麼遞迴zhi會先運算一次第一次呼叫dao的本函式
然後去執行第二次呼叫的本函式
第二次呼叫的本函式會呼叫函式和return裡面第一次呼叫的函式。
如此拆分迴圈
你遞迴只迴圈幾次還好說,要是幾萬次我**也給你說不明白,所以遞迴你不需要明白原理,只要知道怎麼用就可以了
c語言程式設計問題,請求大神幫我解釋兩個步驟 運用了遞迴,但是兩個子函式我沒看懂,不知道為什麼這樣做
5樓:匿名使用者
對於(1),也就是函式xh。
這個問題是在1到n的n個數中,取一些數出來,使得它們的和為m。
對於這個問題,有一些特殊情況:那就是a,b
a. 如果m=1,則只有一種情況,那就只用一種情況,只能取一個數,這個數就是1。
b. 如果不滿足a,且 n<=1 或者m<=0, 那麼將沒有解,也就是有0種情況。
c. 如果不滿足a和b,那麼又可以分成兩種情況(這是遞迴的關鍵之處),i.如果取最後一個數,且n就等於m,那就這一種情況也就是 t=1,若n=m,那麼就只有取m這個數一種情況。
在接下來的就分成兩種:i.不取最後一個數,則需要在前面n-1個數中取c個數,它們的和是m,也就是 zxh(n-1,m,c);ii.
要去最後一個數, 則 需要在前面n-1個數中取c-1個數,它們的和是m-n,也就是zxh(n-1,m-n,c-1)了。
需要好好仔細理解,祝你早點想透
這兩個戶型那個好講一下唄,這兩個戶型哪個好些
昆明紫蘋果裝飾 第一,左邊這個戶型,餐廳外的陽臺一般不會經常用吧,經常用於休息的是客廳外的陽臺,這就佔用了不必要的面積。第二,還是陽臺,左邊這個戶型的陽臺都是在一個線上的方向,而右邊這個戶型的卻是在不同的方向,相對來說,白天所以時間,兩個陽臺中至少有一個是有光的,而左邊的戶型就不敢保證了,當然,如果...
請幫我翻譯一下這兩個句子
以上回答者說的都不對!2句話的出處是電影 聖戰奇兵 裡面父子的對話。ships that pass in the night 通常用來表示範一段短暫感情結束 as human as the next man 和所有的人一樣!1 we were two ships that passed in the...
哪位大神可以翻譯一下這兩個有什麼不一樣我只知道這都是洗頭髮的
威海王哥 羅馬音 syam pu 英文 shampoo 洗髮水。羅馬音 rin seu 英文 rinse 英文原意 沖洗,漂洗 韓國化妝品作 護髮素 的名字 先用 洗頭,乾淨後用 揉搓均勻,稍等一段時間洗去。起泡很少,滑滑的油性,在韓國這兩樣是搭配著賣的,也是韓國人洗頭的必備套裝。我很少用,屋子裡洗...