第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 吉林大学超星慕课《高级程序语言设计》实验06 递归程序设计(级)

吉林大学超星慕课《高级程序语言设计》实验06 递归程序设计(级)

时间:2022-11-28 02:30:33

相关推荐

吉林大学超星慕课《高级程序语言设计》实验06 递归程序设计(级)

代码仅供参考,欢迎一起交流!

1 题目名称:排列组合2 题目名称:Hermite多项式3 题目名称:Ackerman函数4 题目名称:最大公因数5 题目名称:顺序检索6 题目名称:最大元素7 题目名称:数组反序8 题目名称:截木条

1 题目名称:排列组合

问题描述:编写程序求函数C(m,n)的值。

输入:从键盘随机输入一个自然数和一个非负整数,分别作为m和n的值(m≥n)。

输出:函数C(m,n)的值。

样例1:

输入:

4 1

输出:

4

样例2:

输入:

6 2

输出:

15

#include <stdio.h>int fun(int m, int n){if (n < 0){return 0;}else if (m == n || n == 0){return 1;}else{return fun(m - 1, n) + fun(m - 1, n - 1);}}void main(){int m, n;scanf_s("%d %d", &m, &n);printf("%d", fun(m, n));}

2 题目名称:Hermite多项式

题目描述:编写程序,用递归方法求解Hermite 多项式值。Hermite 多项式定义如下。

输入:从键盘随机输入一个非负整数和一个实数,作为n和x的值。

输出:Hn(x)的值,精确到小数点后2位。

样例1:

输入:

0 1.5

输出:

1.00

样例2:

输入:

2 2.4

输出:

21.04

#include <stdio.h>float Hermite(int n, float x){if (n == 0){return 1;}else if (n == 1){return 2 * x;}else{return 2 * x * Hermite(n - 1, x) - 2 * (n - 1) * Hermite(n - 2, x);}}void main(){int n;float x;scanf_s("%d %f", &n, &x);printf("%.2f", Hermite(n, x));}

3 题目名称:Ackerman函数

问题描述:编写程序,计算 Ackerman 函数值。Ackerman 函数定义如下

输入:从键盘随机输入两个非负整数,分别作为m和n的值。

输出:Ack(m, n)的值。

样例1:输入 2 3 输出 9

样例2:输入 3 2 输出 29

样例3:输入 0 3 输出 4

//阿克曼,李在赣神魔!?#include <stdio.h>int Ack(int m, int n){if (m == 0){return n + 1;}else if (n == 0){return Ack(m - 1, 1);}else{return Ack(m - 1, Ack(m, n - 1));}}void main(){int m, n;scanf_s("%d %d", &m, &n);printf("%d", Ack(m, n));}

4 题目名称:最大公因数

题目描述:编写程序,用递归方法求解m、n最大公约数。对正整数u和v 可以采用欧几里德辗转相除算法求它们的最大公因数,具体过程如下:

u% v → r1

v % r1 → r2

r1% r2 → r3

r2 % r3 → r4

… …

rn-1% rn → rn+1=0

当余数rn+1=0时,计算过程结束,rn 为正整数u 、v的最大公因数。

输入:从键盘随机输入两个正整数m和n。输出:最大公因数。

样例1:

输入:

12 15

输出:

3

样例2:

输入:

28 49

输出:

7

#include <stdio.h>int gcd(int m, int n){int r;if (m >= n){r = m;m = n;n = r;}if (n % m == 0){return m;}else{return gcd(m, n % m);}}void main(){int m, n;scanf_s("%d %d", &m, &n);printf("%d", gcd(m, n));}

5 题目名称:顺序检索

题目描述:编写程序,用递归方法在整数组中进行顺序检索。

输入:

第一行输入一个正整数n(0<n≤100),表示数组的元素个数;

第二行依次输入n个整数,作为数组的元素;

第三行输入待检索的关键字。

输出:

如果数组中含有关键字,则输出其首次出现的位置(下标值较小的位置)否则输出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

//这一题用递归写的话,只能写出从n开始往前检索的,不符合下标较小的要求,无奈放弃。//如果各路大神有更好的方法,欢迎交流~#include <stdio.h>void main(){int a[100], n, key, i, flag = 0;scanf_s("%d", &n);for (i = 0; i < n; i++){scanf_s("%d", &a[i]);}scanf_s("%d", &key);for (i = 0; i < n; i++){if (a[i] == key){flag = 1;printf("%d", i);break;}}if (flag == 0){printf("NULL");}}

6 题目名称:最大元素

题目描述:编写程序,用递归方法求解长度为n的整型数组中最大元素值。

输入:第一行输入一个正整数n(0<n≤100),表示数组的元素个数;第二行依次输入n个整数,作为数组的元素。

输出:最大元素的值。

样例1:

输入:

10

9 8 7 6 5 4 3 2 1 0

输出:

9

样例2:

输入:

10

0 1 2 3 4 5 6 7 8 9

输出:

9

#include <stdio.h>int max(int a[], int n){int t;if (n == 1){return a[0];}t = max(a, n - 1);//要用一个变量表示递归后的值,否则return时会再次递归产生错误!!!if (t > a[n - 1]){return t;}else{return a[n - 1];}}void main(){int a[100], n, i;scanf_s("%d", &n);for (i = 0; i < n; i++){scanf_s("%d", &a[i]);}printf("%d", max(a, n - 1));}

7 题目名称:数组反序

题目描述:编写程序,用递归方法反序数组。

输入:第一行输入一个正整数n(0<n≤100),表示数组的元素个数;第二行依次输入n个整数,作为数组的元素。

输出:顺次输出逆序后数组中元素,元素间以一个西文空格间隔,最后一个元素后无字符。

样例1:

输入:

8

0 2 3 4 5 9 10 8

输出:

8 10 9 5 4 3 2 0

样例2:

输入:

5

0 2 3 3 5

输出:

5 3 3 2 0

#include <stdio.h>void reverse(int a[], int n){if (n){if (n - 1){printf("%d ", a[n - 1]);}else{printf("%d", a[n - 1]);}reverse(a, n - 1);}else{return;}}void main(){int a[100], n, i;scanf_s("%d", &n);for (i = 0; i < n; i++){scanf_s("%d", &a[i]);}reverse(a, n);}

8 题目名称:截木条

题目描述:

给定一个长度为n的木条,将其在大致2/5的位置截断,得到2个长度仍为整数的木条;如果新得到的木条的长度仍旧超过规定长度k,将继续按照上述方法处理得到的木条,直到所有木条的长度都不大于k。

编写程序,用递归方法计算一个长度为n的木条,当规定长度为k时,其经过上述截断过程会得到多少根木条。其中:n、k均为正整数,n>10,k>3,且假设木条截断所得短木条长度四舍五入为正整数,长木条长度为总长减去短木条长度。

输入:顺次从键盘输入两个正整数n和k(n>10,k>3)。

输出:木条根数。

样例1:

输入: 20 4

输出: 7

样例2:

输入: 3 20

输出: 1

#include <stdio.h>static int count = 1;int catch123(int n, int k){if (n <= k){return count;}else{count++;catch123(2 * n / 5, k);catch123(n - 2 * n / 5, k);return count;}}int main(){int n, k;scanf_s("%d %d", &n, &k);printf("%d", catch123(n, k));return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。