这是有关递归算法的第二篇,希望能对大家有点启示
目录
1.分离函数digit(n,k)
题目描述
在程序中定义一函数digit(n,k),它能分离出整数n从右边数第k个数字。
输入
正整数n和k。
输出
一个数字。
样例输入
31859 3
样例输出
8
源代码
#include<stdio.h>
int digit(long n,long k)
{
if(k!=1)
return digit(n/10,k-1);//一位一位的移动
else if(k==1)
return n%10;//直到到第k位了,分离出来
}
int main()
{
long n,k;
scanf("%ld %ld",&n,&k);
int a;
a=digit(n,k);
printf("%d",a);
return 0;
}
2.Hermite多项式
这个题目远远没有它看起来那么难,最重要的是要看懂题目
题目描述
用递归的方法求Hermite多项式的值
对给定的x和正整数n,求多项式的值。
输入
给定的n和正整数x。
输出
多项式的值。
样例输入
1 2
样例输出
4.00
源代码
#include<stdio.h>
int Hermite(int n,int x)
{
if(n==0)
{
return 1;
}
else if(n==1)
{
return 2*x;
}
else if(n>1)
{
return 2*x*Hermite(n-1,x)-2*(n-1)*Hermite(n-2,x);//这个才是这个代码的灵魂所在
}
}
int main()
{
int n,x;
scanf("%d %d",&n,&x);
float a;
a=(float)Hermite(n,x);
printf("%.2f",a);//注意看题目要求要有两位小数点
return 0;
}
3.求f(x,n)
这也是一道“纸老虎”,主要是看懂这个图从左到右怎么操作
题目描述
已知
求f(x,n)的值
输入
输入x和n。
输出
函数值,保留两位小数。
样例输入
4.2 10
样例输出
3.68
源代码
#include<stdio.h>
#include<math.h>
float fx(float x,float n)
{
if(n==1)
{
return sqrt(1+x);//到最里面层,开始返回
}
else
return sqrt(n+fx(x,n-1));//从左到右开始递推
}
int main()
{
float x,n;
scanf("%f %f",&x,&n);
float a;
a=fx(x,n);
printf("%.2f",a);//注意保留两位小数
}
4. 再求f(x,n)
这题和上面一题非常像,只不过这个题是从上往下的递推
题目描述
已知
用递归函数求解。
输入
第一数是x的值,第二个数是n的值。
输出
函数值。
样例输入
1 2
样例输出
0.40
源代码
#include<stdio.h>
float fx(float x,float n)
{
if(n==1)
{
return x/(1+x);//到最下面了就开始返回
}
else
{
return x/(n+fx(x,n-1));//根据题目来,慢慢往下推
}
}
int main()
{
float x,n;
scanf("%f %f",&x,&n);
float a;
a=fx(x,n);
printf("%.2f",a);//注意看题目要求
}