首页 > 其他 > 详细

递归逻辑——PTA习题为例

时间:2020-03-14 16:35:26      阅读:267      评论:0      收藏:0      [点我收藏+]

前言

PTA上的基础函数题第10章全是用递归求解题目,非常好的学习资料,找个机会归纳一下,加强对递归的理解。

正文

练习10-1 使用递归函数计算1到n之和

本题要求实现一个用递归计算1+2+3+…+n的和的简单函数。
函数接口定义:int sum( int n );

int sum( int n ){
     int re=0;
     if(n<0)//结束条件
       re=0;
     else if(n){
        re=sum(n-1)+n;//回归时的算式
     }
    return re;//递回
}

习题10-2 递归求阶乘和

本题要求实现一个计算非负整数阶乘的简单函数,并利用该函数求 1!+2!+3!+...+n! 的值。

函数接口定义: double fact( int n ); double factsum( int n );

double fact( int n ){
    double sum;
        if(n<=1)//结束条件
           sum=1;
        else
           sum=fact(n-1)*n;//求n的阶层
        return sum;
} 
double factsum( int n ){/*求和*/
    double sum;
    if(n==0)//结束条件
      sum=0;
    else
      sum=factsum(n-1)+fact(n); //和上一题的求和相似,n变成n!,所以用相应的求阶层函数fact(n)!
    return sum;
    
}

习题10-3 递归实现指数函数

本题要求实现一个计算x?^n(n≥1)的函数。
函数接口定义: double calc_pow( double x, int n );

double calc_pow( double x, int n ){
    double sum;
    if(n==0)//结束条件
      sum=1;
   /* else if(n==1)
      sum=x;*/
    else{
        sum=calc_pow(x,n-1)*x;  //回归过程
    }
      return sum;
}

技术分享图片

习题10-4 递归求简单交错幂级数的部分和

本题要求实现一个函数,计算下列简单交错幂级数的部分和:

f(x,n)=x?x^2^+x^3^ ?x^4^ +?+(?1)^n?1^ x^n^ ??

函数接口定义: double fn( double x, int n );

#double fn( double x, int n )
{
    int i;
    double f=1.0;
    /*求阶层*/
    for(i=1;i<=n;i++)
            f=f*x;
    /*改变符号*/
    if(n%2==0)
        f=f*(-1);
    /*递归*/
    if(n==1)//结束条件
        return x;
    else return (f+fn(x,n-1));//参看第一和第二题        
}

习题10-7 十进制转换二进制

本题要求实现一个函数,将正整数n转换为二进制后输出。

函数接口定义: void dectobin( int n );

void dectobin( int n ){
    int re;
    if(n==0)
      printf("0");
    else if(n==1)
      printf("1");
    else{
        dectobin(n/2);
        re=n%2;
        printf("%d",re);
    }
}

技术分享图片

习题10-8 递归实现顺序输出整数

本题要求实现一个函数,对一个整数进行按位顺序输出。
函数接口定义: void printdigits( int n );

void printdigits( int n ){
    int re;
    if(n<=9)//结束条件,限制n为个位数
      printf("%d\n",n); 
    else{
        printdigits(n/10);
        re=n%10;
        printf("%d\n",re);
    }
}

递归并不像我想的那种顺序进行代码的运算 n先是减小到递归出口,就是像栈,先压入后弹出,后压入先弹出!

递归逻辑——PTA习题为例

原文:https://www.cnblogs.com/gis-lhx/p/12492768.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!