吉林大学超星慕课《高级程序语言设计》实验06 递归程序设计(2020级)
作者:互联网
代码仅供参考,欢迎一起交流!
- 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;
}
标签:输出,慕课,return,题目,int,样例,超星,06,输入 来源: https://blog.csdn.net/qq_41722392/article/details/110835811