2017实验10 程序结构与递归函数
2017-12-19 本文已影响0人
林之禾
6-1 使用递归函数计算1到n之和(10 分)
int sum( int n ){
if(n>0){
return n+sum(n-1);
}else{
return 0;
}
}
//你也可以这样
int sum( int n ){
return n<=0?0:n+sum(n-1);
}
6-2 递归计算Ackermenn函数(15 分)
int Ack( int m, int n ){
if(m>0&&n>0){
return Ack(m-1,Ack(m,n-1));
}else if(m>0&&n==0){
return Ack(m-1,1);
}else if(m==0){
return n+1;
}
}
6-3 递归实现指数函数(15 分)
double calc_pow( double x, int n ){
if(n==1){
return x;
}
return x*calc_pow(x,n-1);
}
6-4 递归求Fabonacci数列(10 分)
int f( int n ){
if(n==1||n==2){
return 1;
}else if(n==0){
return 0;
}
return f(n-2)+f(n-1);
}
6-5 递归实现顺序输出整数(15 分)
void printdigits( int n ){
if(n>10)
printdigits(n/10);
printf("%d\n",n%10);
}
6-6 判断满足条件的三位数(15 分)
int isSquare(int n){
if(n == (int)sqrt(n)*(int)sqrt(n))
return 1;
else
return 0;
}
int search( int n ){
int i,j,k,tmp,cnt=0;
for(i=1;i<=9;i++){
for(j=0;j<=9;j++){
for(k=0;k<=9;k++){
tmp = i*100+j*10+k;
if(tmp>=101 && tmp<=n){
if((i==j||i==k||j==k)&&isSquare(tmp)){
cnt++;
}
}
if(tmp>=n)
return cnt;
}
}
}
return 0;
}
6-7 递归求简单交错幂级数的部分和(15 分)
double fn( double x, int n ) {
int k;
if(n%2==0){
k=-1;
}
else {
k=1;
}
if(n==0){
return 0;
}
return k*pow(x, n)+fn(x, n-1);
}
6-8 十进制转换二进制(15 分)
void dectobin( int n ){
if(n>1){
dectobin(n/2);
printf("%d",n%2);
}else{
printf("%d",n);
}
}