1.阿克曼(Ackmann)函数A(m,n)中,m,n定义域是非负整数(m<=3,n<=10),函数值定义为:
akm(m,n) = n+1; (m=0时)
akm(m,n) = akm(m-1,1); (m>0,n=0时)
akm(m,n) = akm(m-1,akm(m, n-1)); (m,n>0时)
#include<iostream>
using namespace std;
int ack(int m,int n);
int main()
{
int m,n;
cin>>m>>n;
cout<<ack(m,n)<<endl;
return 0;
}
int ack(int m,int n)
{
if(m==0)//判断是否到达递归边界m=0
return (n+1);
else if(n==0)//判断是否到达递归边界n=0
return (ack(m-1,1));
else//否则继续递归
return (ack(m-1,ack(m,n-1)));
}
2.在程序中定义一函数digit(n,k),它能分离出整数n从右边数第k个数字,如digit(31859,3)=8,digit(2076,5)=0。
#include<iostream>
using namespace std;
int calculate(int n,int k);
int main()
{
int n,k;
cin>>n>>k;
cout<<calculate(n,k)<<endl;
return 0;
}
int calculate(int n,int k)
{
k--;
if(k==0)//判断是否到达递归边界k=0
return n%10;
else//否则继续递归
return calculate(n/10,k);
}
3.用递归的方法求Hermite多项式的值
,对给定的x和正整数n,求多项式的值。并保留两位小数。
#include<iostream>
#include<cstdio>
using namespace std;
double calculate(int n,int x);
int main()
{
int n,x;
double result;
cin>>n>>x;
result=calculate(n,x);
printf("%.2lf\n",result);
return 0;
}
double calculate(int n,int x)
{
if(n==0)//判断是否到达递归边界n=0
return 1;
else if(n==1)//判断是否到达递归边界n=1
return 2*x;
else//否则继续递归
return ( 2*x*calculate(n-1,x)-2*(n-1)*calculate(n-2,x) );
}
4.已知 ,计算x=4.2,n=10以及x=2.5,n=15时的f的值。
,计算x=4.2,n=10以及x=2.5,n=15时的f的值。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
double calculate(double x,double n);
int main()
{
double n,x;
double result;
cin>>x>>n;
result=calculate(x,n);
printf("%.2lf\n",result);
return 0;
}
double calculate(double x,double n)
{
if(n==1)//判断是否到达递归边界n=1
return sqrt(1+x);
else//否则继续递归
return sqrt(n+calculate(x,n-1));
}
5.已知
用递归函数求解。
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
double calculate(double x,double n);
int main()
{
double n,x;
double result;
cin>>x>>n;
result=calculate(x,n);
printf("%.2lf\n",result);
return 0;
}
double calculate(double x,double n)
{
if(n==1)//判断是否到达递归边界n=1
return x/(1+x);
else//否则继续递归
return x/(n+calculate(x,n-1));
}