吉林大学超星MOOC学习通高级语言程序设计 C++ 实验06 递归程序设计(2021级)
目錄
?1.?最大公因數(shù)?
2.Hermite多項(xiàng)式
3.?Ackerman函數(shù)
4.排列組合
5.?最大元素
6.?數(shù)組反序
7.?十進(jìn)制轉(zhuǎn)換任意進(jìn)制
8.?順序檢索
?1.?最大公因數(shù)?
題目編號 :Exp06-Basic04
題目名稱:最大公因數(shù)
題目描述:編寫程序,用遞歸方法求解m、n最大公約數(shù)。對正整數(shù)u和v 可以采用歐幾里德輾轉(zhuǎn)相除算法求它們的最大公因數(shù),具體過程如下:
u% v → r~1~
v % r~1~ → r~2~
r~1~% r~2~ → r~3~
r~2~ % r~3~ → r~4~
? ?… … ?
r~n-1~% r~n~ → r~n+1~=0
當(dāng)余數(shù)r~n+1~=0時,計(jì)算過程結(jié)束,r~n~ 為正整數(shù)u 、v的最大公因數(shù)。
輸入:從鍵盤隨機(jī)輸入兩個正整數(shù)m和n。輸出:最大公因數(shù)。
?
樣例1:
輸入: 12?15 輸出: 3樣例2:
輸入: 28?49 輸出: 7 #include <iostream>using namespace std;int gcd(int x, int y) {if (y == 0)return x;elsereturn gcd(y, x % y); }int main() {int x, y;cin >> x >> y;cout << gcd(x, y);return 0; }?比較基礎(chǔ)的一道題,利用輾轉(zhuǎn)相除法求最大公約數(shù)
2.Hermite多項(xiàng)式
題目編號:Exp06-Basic02,GJBook3-10-03
題目名稱:Hermite多項(xiàng)式
題目描述:編寫程序,用遞歸方法求解Hermite 多項(xiàng)式值。Hermite 多項(xiàng)式定義如下。
輸入:從鍵盤隨機(jī)輸入一個非負(fù)整數(shù)和一個實(shí)數(shù),作為n和x的值。
輸出:H~n~(x)的值,精確到小數(shù)點(diǎn)后2位。
樣例1:
樣例2:
輸入: 2??2.4 輸出: 21.04 #include <iostream> #include <iomanip> using namespace std;double Hermite(int n,double x) {if (n == 0)return 1;if (n == 1)return 2 * x;return 2 * x * Hermite(n - 1, x) - 2 * (n - 1) * Hermite(n - 2, x);}int main() {int n;double x;cin >> n >> x;cout << fixed << setprecision(2) << Hermite(n, x);return 0; }特別注意Hermite函數(shù)的返回值類型是double ,遞歸直接按照給的公式寫就行
3.?Ackerman函數(shù)
題目編號:Exp06-Basic03,GJBook3-10-04
題目名稱:Ackerman函數(shù)
問題描述:編寫程序,計(jì)算?Ackerman?函數(shù)值。Ackerman?函數(shù)定義如下
??????????
?
輸入:從鍵盤隨機(jī)輸入兩個非負(fù)整數(shù),分別作為m和n的值。
輸出:Ack(m,?n)的值。
樣例1:輸入?2 3??輸出?9
樣例2:輸入?3 2??輸出?29
樣例3:輸入?0 3??輸出?4
#include <iostream>using namespace std;int Ack(int m, int n) {if (m == 0)return n + 1;if (n == 0)return Ack(m - 1, 1);return Ack(m - 1, Ack(m, n - 1)); }int main() {int m, n;cin >> m >> n;cout << Ack(m, n) << endl;return 0; }4.排列組合
題目編號:Exp06-Basic01,GJBook3-10-02
題目名稱:排列組合
問題描述:編寫程序求函數(shù)C(m,n)的值。
輸入:從鍵盤隨機(jī)輸入一個自然數(shù)和一個非負(fù)整數(shù),分別作為m和n的值(m≥n)。
輸出:函數(shù)C(m,n)的值。
樣例1:
輸入:
4? 1??
輸出:
4
樣例2:
輸入: 6?2? 輸出: 15 #include <iostream>using namespace std;int C(int m, int n) {if (n < 0)return 0;if (n == 0)return 1;if (n == 1)return m;if (m < 2 * n)return C(m, m - n);if (m >= 2 * n)return C(m - 1, n - 1) + C(m - 1, n);}int main() {int m, n;cin >> m >> n;cout << C(m, n);return 0; }注意C函數(shù)中m,n的相對位置?不要將兩者搞混
5.?最大元素
題目編號:Exp06-Enhance01,GJBook3-10-05
題目名稱:最大元素
題目描述:編寫程序,用遞歸方法求解長度為n的整型數(shù)組中最大元素值。
?
輸入:第一行輸入一個正整數(shù)n(0<n≤100),表示數(shù)組的元素個數(shù);第二行依次輸入n個整數(shù),作為數(shù)組的元素。
輸出:最大元素的值。
樣例1:
樣例2:
輸入: 10 0?1?2?3?4?5?6?7?8?9 輸出: 9 #include <iostream>using namespace std;int Max(int* a,int len) {if (len == 1)return *a;if (a[len - 2] < a[len - 1])a[len - 2] = a[len - 1];return Max(a, len - 1);}int main() {int n, * a;cin >> n;//a = new int[n];a = (int*)malloc(sizeof(int) * n);for (int i = 0;i < n;i++){cin >> a[i];}cout << Max(a,n);return 0; }?哈哈哈哈哈哈哈,由于C語言里面沒有new,所以一般使用malloc函數(shù)來動態(tài)分布a的內(nèi)存
6.?數(shù)組反序
題目編號:Exp06-Enhance02
題目名稱:數(shù)組反序
題目描述:編寫程序,用遞歸方法反序數(shù)組。
輸入:第一行輸入一個正整數(shù)n(0<n≤100),表示數(shù)組的元素個數(shù);第二行依次輸入n個整數(shù),作為數(shù)組的元素。
輸出:順次輸出逆序后數(shù)組中元素,元素間以一個西文空格間隔,最后一個元素后無字符。
樣例1:
樣例2:
輸入: 5 0?2?3?3?5 輸出: 5?3?3?2?0 #include <iostream> #include <malloc.h> using namespace std;void Reverse(int* a,int len) {if (len == 1)cout << a[len - 1];//不輸出行末空格防止出錯if (len > 1){cout << a[len - 1]<<" ";Reverse(a, len - 1);} } int main() {int n, * a;cin >> n;a = (int*)malloc(sizeof(int) * n);for (int i = 0;i < n;i++){cin >> a[i];}Reverse(a, n);return 0; }?經(jīng)測試,本題的Reverse也可以直接這樣寫
void Reverse(int* a,int len) {if (len > 0){cout << a[len - 1]<<" ";Reverse(a, len - 1);} }7.?十進(jìn)制轉(zhuǎn)換任意進(jìn)制
題目編號 :Exp06-Enhance05,freshman-1022
題目名稱:十進(jìn)制轉(zhuǎn)換任意進(jìn)制
題目描述:編寫程序,用遞歸方法將十進(jìn)制的正整數(shù) N 轉(zhuǎn)換為 b 進(jìn)制數(shù)(2≤b≤36),其中字符、ASCII碼值和數(shù)值之間的對應(yīng)關(guān)系如下:
輸入:一行輸入兩個非負(fù)整數(shù),分別是十進(jìn)制的 N 和 b ?,其中 0 <=N <=2^31 ,2 <=b <= 36 。
輸出:N 的 b 進(jìn)制數(shù)。
?
樣例1:
輸入: 579?8 輸出: 1103樣例2:
輸入: 579?20 輸出: 18J #include <iostream>using namespace std;void trans(long long a, int b) { if (0 == a)return;trans(a / b, b);cout<< "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[a % b]; } int main() {long long a;int b;cin >> a >> b;if (a == 0)cout << "0";else trans(a, b);return 0; }8.?順序檢索
題目編號:Exp06-Basic05,GJBook3-10-06
題目名稱:順序檢索
題目描述:編寫程序,用遞歸方法在整數(shù)組中進(jìn)行順序檢索。
?
輸入:
第一行輸入一個正整數(shù)n(0<n≤100),表示數(shù)組的元素個數(shù);
第二行依次輸入n個整數(shù),作為數(shù)組的元素;
第三行輸入待檢索的關(guān)鍵字。
輸出:
如果數(shù)組中含有關(guān)鍵字,則輸出其首次出現(xiàn)的位置(下標(biāo)值較小的位置)否則輸出NULL。
?
樣例1:
輸入: 8 0?2?3?4?5?9?10?8 3 輸出: 2樣例2:
輸入: 8 0?2?3?4?5?9?10?8 6 輸出: NULL #include <iostream>using namespace std;int Search(int* a, int key, int len,int num) {if (num == len)return -1;if (*(a + num) == key)return num;elsereturn Search(a, key, len, num + 1); }int main() {int len, * a, key;cin >> len;a = new int[len];for (int i = 0;i < len;i++){cin >> a[i];}cin >> key;int x = Search(a, key, len, 0);if (x == -1)cout << "NULL" << endl;else cout << x << endl;return 0; }總結(jié)
以上是生活随笔為你收集整理的吉林大学超星MOOC学习通高级语言程序设计 C++ 实验06 递归程序设计(2021级)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.怎样定制VC#DataGrid列标题
- 下一篇: 关于字符串流的学习(c++)