文章目录
- 1、用一个表达式,判断一个数X,是否是2的N次方(2,4,8, …),不可用循环语句(递归 实现)
- 2、位运算,实现两个整数的 加法运算(递归实现)
递归算法 是天生的低效率。
如果用循环语句做的改进算法实现起来要比递归复杂得多的话:大幅度增加了复杂度,而在执行效率上得不到满意的回报。建议还是优先选择递归来解决问题。
1、用一个表达式,判断一个数X,是否是2的N次方(2,4,8, …),不可用循环语句(递归 实现)
(宝典第4版P55)
#include<iostream>using namespace std;intlog2(intvalue)//递归 判断一个数是否2的多少次方{if(value==1)return0;elsereturn1+log2(value>>1);//递归 判断}intmain(){intnum;cout<<"请输入一个数, 判断是否是2的N次方:"<<endl;scanf("%d",&num);if(num&(num-1))printf("%d不是2的N次方!\n",num);elseprintf("%d是2的 %d次方!\n",num,log2(num));}2、位运算,实现两个整数的 加法运算(递归实现)
(程序员面试宝典第4版P56)
#include<stdio.h>intAdd(inta,intb)//{if(b==0)returna;// 没有进位的时候完成运算intsum,carry;sum=a^b;// 完成 第一步:没有进位的 加法运算carry=(a&b)<<1;// 完成 第二步:进位、并且 左移运算returnAdd(sum,carry);// 进行递归,相加}intmain(){printf("%d\n",Add(13,12));// 结果是 25}