请看题
题目很简单,判断一个传进来的数是否是2 or 3 or 4的幕。
对于这个,有写一个对数的函数的解法也有另外的解法,那么这里我用一个递归的方法。
首先是判断是否为2 的幕。只需要几个if,比如传入的数为负数那么直接可以确认这一定就不是,另外如果取模的结果不是等于0那么肯定也不是,最后再写一个递归结束的条件,也就是传入的数是否为1,这个返回true。在进行递归调用的时候需要传入当前数的一半。
看答案
bool isPowerOfTwo(int n) {
if(n <= 0 || n % 2 != 0 && n != 1){
return false;
}
if(n == 1){
return true;
}
return isPowerOfTwo(n / 2);
}
另外两题也是一样的解法,只不过是把2换成了3 或 4
bool isPowerOfThree(int n) {
if(n <= 0){
return false;
}
if(n == 1){
return true;
}
if(n % 3 != 0){
return false;
}
return isPowerOfThree(n / 3);
}
bool isPowerOfFour(int n) {
if(n <= 0){ return false; }
if( n == 1){
return true;
}
if(n % 4 != 0){ return false;}
return isPowerOfFour(n / 4);
}