遞歸 專題



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
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章