前幾天發布第一部分,今天是第二部分,謝謝大家支援。
(一)找出陣列最大值問題:
引導:在陣列裡找出最大值,我們將問題拆開來考慮
假設陣列int a = ;如果我將這陣列分成兩部分,即a[5]和a[0-4],如果判斷a[5]比max(a[0-4])還大,那a[5]就是最大的,反之在a[0-4]找出最大的還是按照上面的步驟分成兩部分。這樣將問題一步步分解的思路又是遞迴的思路,所以使用遞迴解決。
分析:已知:顯然,乙個陣列如果只有一項我們根本沒有必要判斷最大值,所以直接輸出,寫在 if 語句中
未知:我們通過比較a[5]和max(a[0-4])哪個大,這我們不知道所以寫在else在這裡a[5]和a[0-4]哪個大還有兩種情況分開討論,若果a[5]大輸出a[5]反之找出a[0-4]最大值。
引數:我們要查詢的陣列,所以需要陣列,並且我們是將陣列一點一點拆分,所以需要乙個變數代表陣列的長度
**:
#includeint max(int a, int n)//設乙個max的方法傳入陣列a和陣列最下標(或陣列元素個數-1)
}int main()
; printf("%d", max(a, 5));
return 0;
}
(二)將乙個整數反向輸出
引導:我們將乙個大於十位的整數,如果用非遞迴的方法使用乙個迴圈,將他取餘再除10,直到整數為零。我們來分析一下,我們從多位的整數,一步一步減小,將他們乙個乙個輸出,這種一步一步減小問題的思路,也符合遞迴的思路,所以遞迴沒問題。
分析:已知:如果這個整數是各位數,那麼就直接輸出就行
未知:當這個整數不是個位數,那麼我們將取餘輸出,再找他減小1/10的逆序
引數:在整個方法中,只是對輸入的整數進行拆分,所以只有乙個變數用於傳入資料。
**:
#includevoid num(int n)
}int main()
(三)折半查詢問題
引導:折半查詢問題,我們將有序序列一分為二,用中間的值與我們需要尋找的值相比較,如果尋找的值比中間的值大,那就以後半段再一半,反之就在前半段找。我們可以看到我們將乙個有序序列不停一分為二,將問題逐步拆分,很符合遞迴的思想。所以可以用遞迴來解決這個問題。
分析:上面分析了主要思路現在我們分析那些事已知(事先保證要查詢的元素在有序序列中):如果要找的元素就在有序序列的中間位置,那麼不用再遞迴直接輸出位置。
未知:當中間的元素比查詢元素大,那麼就返回前半段,反之返回後半段。在引數問題,我們首先要有有序陣列,其次是要查詢的元素,如何控制前半段還是後半段,就用兩個值去作為陣列查詢的區間。
**:
#includeint num(int a, int from,int end, int found)
}int main()
; scanf_s("%d", &i);
if (i > a[9])
printf(" no found");
else
printf("在第%d個位置", num(a, 0, 10, i)+1);
return 0;
}
以上是第二部分,謝謝。 C語言遞迴習題 (1)
遞迴在各個考試中特別常考,因為考這類題目可以快速反應考生的程式設計思維水平。所以遞迴問題的練習是必不可少的。遞迴說難不難,說易不易,要把握關鍵的點,我們可以解決問題。我在這裡給幾道遞迴題目由易到難,希望給大家有所幫助。乙個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜...
C語言練習題 遞迴
會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1b2 b8,其中b為相應擺法中第i行皇后所處的列數。已經知道8皇后問...
C語言的習題學習2
致敬老大哥,因為周二出奇的課少,於是今天可以加更一次,爭取追上老大哥的進度。第二題 企業發放的獎金根據利潤提成。利潤 i 低於或等於10萬元時,獎金可提10 利潤高於10萬元,低於20萬元時,低於10萬元的部分按10 提成,高於10萬元的部分,可可提成7.5 20萬到40萬之間時,高於20萬元的部分...