递归(练习)
作者:互联网
递归的关键:
- 终止条件。
- 递归表达式。
一、2的幂
题目来源:https://leetcode-cn.com/problems/power-of-two/
题目描述
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
测试用例
- -231 <= n <= 231 - 1
示例一
输入:n = 1
输出:true
解释:20 = 1
示例二
输入:n = 16
输出:true
解释:24 = 16
示例三
输入:n = 3
输出:false
解法一
递归执行
1.递归表达式,明显是用该数除以2继续递归。
2.递归结束条件:若递归结果为1,则说明该数是2的n次方;若递归结果等于0,说明该数小于等于0。
3.结合该题,我们可以先判断该数是否为奇数,若为奇数,直接返回false。
bool isPowerOfTwo(int n) {
if(n == 0)
return false;
if(n == 1)
return true;
if(n % 2 == 1)
return false;
else
return isPowerOfTwo(n/2);
}
解法二
若该数是2的n次方,则该数的二进制中只存在一个1,因此将该数n和(n-1)进行&运算,若结果为0,则该数是2的n次方。
(n & (n - 1)) == 0
若测试的数字 小于等于0,则该数肯定不是二的倍数。
因此,总代码为
return n > 0 && (n & (n - 1)) == 0;
二、
待更…
标签:return,递归,练习,次方,false,true,该数 来源: https://blog.csdn.net/weixin_45865773/article/details/123597515