C語言遞迴習題 (1)

2021-09-25 13:45:42 字數 1702 閱讀 9141

遞迴在各個考試中特別常考,因為考這類題目可以快速反應考生的程式設計思維水平。所以遞迴問題的練習是必不可少的。

遞迴說難不難,說易不易,要把握關鍵的點,我們可以解決問題。我在這裡給幾道遞迴題目由易到難,希望給大家有所幫助。

乙個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量

(一)用遞迴求由1到100的和問題

解析:求和我們一般用乙個迴圈,每次迴圈將值進行累加,如果運用遞迴思想即自身呼叫自身,大家思考一下,在求和的時候是不是將當前的值和前面所有的和相加。

設f(4)=3+2+1 1

那麼就可以f(5)=f(4)+5 2

從上式子 2 來看他們重複複調用了 f 這個函式,若求f(5)則求f(4)+5。自身呼叫自身來求解問題很符合遞迴的特性,所以解決這個問題是可以使用遞迴解決的。

我們不難推出若求 f(n)則求f(n-1)+n就可以了,但是自身呼叫自身什麼時候可以停止呢,但我們往前推的到1的時候是不用再往前了。

#includeint add(int n)//遞迴函式

int main()

事實上我們還可以從**看出 if 語句中寫的是已知資訊,else 語句寫的是未知資訊,比如上面的**,我要求從1到n的和,當n為1時就是從1到1時的和,結果不用算就知道是1,那我們不知道的資訊就是從1到n的值但是我們知道 f(n)=f(n-1)+n,那麼就把這語句寫入else裡。

大家可以自己練習一下斐波那契數和歐幾里得演算法,與上題難度相當。

(二)漢諾塔問題

什麼是漢諾塔:

漢諾塔:漢諾塔(又稱河內塔)問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。

解析:漢諾塔問題看似很複雜但是我們這麼想如果把漢諾塔n層數看成兩層,最底那一層和除了最底層的n-1層看成整體,那麼就是化簡成倆層的漢諾塔,對於大家來說兩層的漢諾塔大家都會。將n-1這整體看成新的漢諾塔,那麼跟剛剛的思路一樣拆成兩部分進行下去。還是將問題一步步分解,所以用遞迴解決這問題合適不過了。

有了上一題的啟發我們直接分析:

已知 :每次只能動一次當只有一層的時候直接由第乙個柱子移動到第三個柱子任務完成所以在if語句中

未知:當層數超過一層時候,將n層看成兩層,將n-1層從第乙個柱子放入第二個柱子上

最底一層放入第三個柱子上,將剩下的n-1層由第二個柱子移到第三個柱子上。

通過分析我們建立乙個方法即解決n階漢諾塔的方法,他的引數有層數和三個柱子(分別代表從哪移動到哪)

設full(char a,char b,char c, int n)是解決n階漢諾的方法同樣(a, b, c分別代表三個柱子也代表起點,過程,終點,n代表n階漢諾塔,如果是n-1則是n-1階漢諾塔)

執行結果

以上是第一部分的內容,謝謝。(明天再更第二部分)

C語言遞迴習題 (2)

前幾天發布第一部分,今天是第二部分,謝謝大家支援。一 找出陣列最大值問題 引導 在陣列裡找出最大值,我們將問題拆開來考慮 假設陣列int a 如果我將這陣列分成兩部分,即a 5 和a 0 4 如果判斷a 5 比max a 0 4 還大,那a 5 就是最大的,反之在a 0 4 找出最大的還是按照上面的...

C語言習題(1)

2020 11 5 輸出所有的 水仙花數 所謂的 水仙花數 是指乙個三位數其各位數字的立方和等於該數本身,例如153是 水仙花數 因為 153 13 53 33。水仙花數 include intmain return0 相傳韓信才智過人,從不直接清點自己軍隊的人數,只要讓士兵先後以三人一排 五人一排...

C語言練習題 遞迴

會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1b2 b8,其中b為相應擺法中第i行皇后所處的列數。已經知道8皇后問...