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);
      }
}
上一篇下一篇

猜你喜欢

热点阅读