判断一个正整数是否是2的正整数次幂,如果是则计算此数是2的多少次方,要求不能用for, while, goto循环语句。
解法:
#include <stdio.h>
int log_2(int x)
{
if(1==x) {
return 0;
} else {
return log_2(x>>1) + 1;
}
}
int is_order(int x)
{
if(x&(x-1)) {
return -1;
} else {
return log_2(x);
}
}
int main(int argc, char** argv)
{
int val;
printf("input a number:");
scanf("%d", &val);
printf("result: %d\n", is_order(val));
return 0;
}
不让用循环,却又不得不循 。。。。 看来还是递归大法好 !