1、用一個表達式,判斷一個數X是否是2的N次方(2,4,8, …),不可用循環語句
(程序員面試寶典第4版P55)
#include <iostream>
using namespace std;
int log2(int value) //遞歸判斷一個數是2的多少次方
{
if (value == 1)
return 0;
else
return 1 + log2(value >> 1);
}
int main()
{
int num;
cout << "請輸入一個數, 判斷是否是2的N次方:" << endl;
scanf("%d", &num);
if (num & (num - 1))
printf("%d不是2的N次方!\n", num);
else
printf("%d是2的 %d次方!\n", num, log2(num));
}
2、位運算實現兩個整數的加法運算(遞歸實現)
(程序員面試寶典第4版P56)
#include <stdio.h>
int Add(int a, int b) //
{
if (b == 0)
return a; // 沒有進位的時候完成運算
int sum, carry;
sum = a ^ b; // 完成 第一步:沒有進位的 加法運算
carry = (a & b) << 1; // 完成 第二步:進位、並且 左移運算
return Add(sum, carry); // 進行遞歸,相加
}
int main()
{
printf("%d\n", Add(13, 12)); // 結果是 25
}