【PTA+LeetCode】递归----代码练习

递归学习博客博客地址

1.递归实现指数函数

在这里插入图片描述

double calc_pow( double x, int n ){
    //1.确定退出条件
    //2.找等价关系式
    if(n==1){
        return x;
    }
    return x*calc_pow(x,n-1);
}

2.递归计算Ackermenn函数

在这里插入图片描述

int Ack( int m, int n ){
    //1.确定退出条件
    //2.确定关系式
    if(m==0){
        return n+1;
    }
    if(n==0&&m>0){
        return Ack(m-1,1);
    }
    if(m>0&&n>0){
        return Ack(m-1,Ack(m,n-1));
    }
}

3.递归实现顺序输出整数

在这里插入图片描述

void printdigits( int n ){
    //1.确定函数要干嘛--输出整数,且按位输出
    //2.确定终止条件,只剩最后一个位的时候
    //3.递归关系式 n>9 输出n%10,n=n/10
    if(n<10){
        printf("%d\n",n);
    }
    if(n>=10){
        //printf("%d\n",n%10);在递归之前就输出的话,会从低位开始输出
        printdigits(n/10);
        printf("%d\n",n%10);
    }
}

4.递归求阶乘和

在这里插入图片描述

double fact( int n ){
    //1.确定函数要干嘛--求阶乘
    //2.确定终止条件,n<=2
    //3.递归关系式 n*f(n-1)
    if(n<=1){
        return 1;
    }
    return n*fact(n-1);
}
double factsum( int n ){
    //1.确定函数要干嘛--阶乘加和
    //2.确定终止条件,n=1
    //3.递归关系式 factsum(fact(n))
    //fact(n)+factsum(n-1);
    if(n==1){
        return 1;
    }
    double sum=0.0;
    for(int i=1;i<=n;i++){
        sum+=fact(i);
    }
    return sum;
}

5.递归求简单交错幂级数的部分和

在这里插入图片描述

double fn( double x, int n ){
    //1.确定函数要干嘛--求部分和
    //2.确定终止条件,n=1 加x
    //3.递归关系式 
    if(n==1){
        return x;
    }
    return pow(-1,n-1)*pow(x,n)+fn(x,n-1);
}

6.递归求Fabonacci数列

在这里插入图片描述

int f(int n){
    //1.确定函数要干嘛--求fb数列
    //2.确定终止条件,n=0 n=1
    //3.递归关系式 
    if(n==0 || n==1){
        return n;
    }
    return f(n-2)+f(n-1);
}

7.LeetCode50:Pow(x, n)

LeetCode50:Pow(x, n)

//只能过291 / 306 个通过的测试用例,要是全过得考虑降幂,直接累乘会溢出
double myPow(double x, long long n) {
    if(n==1){
        return x;
    }
    if(n==0&&x!=0){
        return 1;
    }
    if(n==-1){
        return 1/x;
    }
    if(n<-1){
        long long m=0-n;
        return (1/x)*myPow(1/x,m-1);
    }
//n>1的情况
    return x*myPow(x,n-1);

}

8.LeetCode231:2的幂

LeetCode231:2的幂

bool isPowerOfTwo(int n) {
    //1.确定函数要干嘛--判断是不是2的幂
    //2.确定终止条件,n=2
    //3.递归关系式 
    if (n < 1) return false;
    if(n!=1 && n%2==1){
       return false;
    }
    if(n==2 || n==1){
        return true;
    }
    return isPowerOfTwo(n/2);
}

9.LeetCode326:3的幂

LeetCode326:3的幂

bool isPowerOfThree(int n) {
    if(n==3 || n==1){
        return true;
    }
    if(n<1){
        return false;
    }
    if(n!=1 && n%3!=0){
        return false;
    }
    return isPowerOfThree(n/3);
}
//判断是不是4的幂也类似 代码如下
bool isPowerOfFour(int n) {
    if(n<1){
        return false;
    }
    if(n==4 || n==1){
        return true;
    }
    if(n%4!=0 && n!=1){ //直接排除了一些连4都不能整除的数
        return false;
    }
    return isPowerOfFour(n/4);
}
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值