栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

leetcode 1342.将数字变成0的操作次数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode 1342.将数字变成0的操作次数

力扣1342题

描述:把数字变成0

错误代码

c语言代码⬇️

// mothod2
int count(int x){
    if(x == 1)
        return 1;
    else if(x%2 == 1)
        return count(x-1) + 1;
    else
        return count(x/2) +1 ;
}

int numberOfSteps(int num){
    return count(num);
}

错误原因:在想要使用递归的时候,没有处理好终点的结束条件,题目给出的定义域是非零常数,所以0也在定义域之内,而当递归函数处理0的时候,会返回count(0/2)+1,也就是count(0)+1,会无限的递归。

正确代码

c语言代码⬇️
方法1:按部就班

// m1
int numberOfSteps(int num){
    int count = 0;
    while(num != 0){
        if(num%2 == 1)
            num -= 1;
        else
            num /= 2;
        count++;
    }
    return count;
}

方法2:递归,处理好终点的结束条件

// m2
int count(int x){
    if(x == 0)
        return 0;
    else if(x == 1)
        return 1;
    else if(x%2 == 1)
        return count(x-1) + 1;
    else
        return count(x/2) +1 ;
}

int numberOfSteps(int num){
    return count(num);
}
总结

总结:注意递归的结束条件!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997663.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号