目录
1.Hermite多项式(10分)
问题描述:编写程序,计算 Hermite 多项式值。Hermite 多项式定义如下。
输入:从键盘随机输入一个非负整数和一个实数,作为n和x的值。
输出:Hn(x)的值,精确到小数点后2位。
样例1:输入 0 1.5 输出 1.00
样例2:输入 1 1.5 输出 3.00
样例3:输入 2 2.4 输出 21.04
样例4:输入 5 2.4 输出 624.20
#include<stdio.h>
float h(int,float);
int main(void)
{
int a;
float b,y;
scanf("%d%f",&a,&b);
y=h(a,b);
printf("%.2f",y);
return 0;
}
float h(int n,float x)
{
if(n==0)
return 1.0;
else if(n==1)
return 2*x;
else
return 2*x*h(n-1,x)-2*(n-1)*h(n-2,x);
}
2.递归求解最大元素(10分)
问题描述:编写程序,用递归方法求解,长度为10的整型数组中最大元素值。
输入:由键盘任意输入10个整数作为数组值。
输出:最大元素的值
样例1:输入 0 1 2 3 4 5 6 7 8 9 输出 9
样例2:输入 9 8 7 6 5 4 3 2 1 0 输出 9
样例3:输入 0 1 2 3 4 9 5 6 7 8 输出 9
#include<stdio.h>
int f(int a[],int);
int g(int,int);
int main(void)
{
int a[10],i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("%d",f(a,10));
return 0;
}
int f(int *p,int n)
{
if(n==0)
return 0;
return g(*p,f(p+1,n-1));
}
int g(int m,int n)
{
if(m>n)
return m;
if(m<=n)
return n;
}
3.输出正整数的各位数字(10分)
问题描述:编写递归函数,把正整数的各位数字依次打印输出
输入:任意一个正整数
输出:从高位开始依次输出正整数的各位数字,每位数占用一行。
样例1: 输入 13
输出 1
3
#include<stdio.h>
int f(int);
int main(void)
{
int m;
scanf("%d",&m);
printf("%d",f(m));
return 0;
}
int f(int x)
{
if(x<10)
return x;
printf("%d\n",f(x/10));
return x%10;
}
4.递归求解字符串的长度(10分)
问题描述:编写递归函数,求给定字符串的长度。
输入:任意一个字符串(字符串中可能包含空格)
输出:输出字符串的长度
样例 : 输入Hello World! 输出12
#include<stdio.h>
int f(char *);
int main(void)
{
char a[100];
gets(a);
printf("%d",f(a));
return 0;
}
int f(char *p)
{
if(*p=='\0')
return 0;
return 1+f(p+1);
}
5.递归查找指定数据(10分)
问题描述:编写递归函数,设已有升序整数数组a[N],并且数组中无重复元素。编写递归函数,使用对半检索方法在数组a中查找值为key的数组元素,如果找到key,函数返回元素在数组中的下标,如果未找到,函数返回-1。
输入:数组大小,数组元素,要查找的元素
输出:如果找到指定元素,输出对应的数组下标;如果未找到,输出-1。
样例: 输入 3
10 100 1000
100
输出 1
#include<stdio.h>
int f(int,int);
int a[1000],key;
int main(void)
{
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",a+i);
scanf("%d",&key);
printf("%d",f(0,n-1));
return 0;
}
//t为起始,g为结尾;
//判断数组中是否存在key,如果存在返回下标,不存在返回-1;
int f(int t,int g)
{
if(t-g>0)
return -1;
if(key==*(a+(t+g)/2))
return (t+g)/2;
if(key>*(a+(t+g)/2))
return f((t+g)/2+1,g);
if(key<*(a+(t+g)/2))
return f(t,(t+g)/2-1);
}