力扣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);
}
总结
总结:注意递归的结束条件!
博客讨论了力扣1342题的错误及修正,错误在于递归结束条件处理不当导致无限递归。提供了两种解决方案:按部就班的循环方法和修复后的递归方法,强调了递归算法中结束条件的重要性。

被折叠的 条评论
为什么被折叠?



