一、fabonacci数列
1、递归实现(不推荐)
int Fabonacci(int n)
{
if( n == 0)
return 0;
if( n == 1)
return 1;
return Fabonacci(n-1) + Fabonacci(n-2);
}
此种方式效率很低,而且有大量的重复计算,数字过大时容易造成程序栈溢出。
2、使用循环
int Fabonacci(int n)
{
if( n == 0)
return 0;
if( n == 1)
return 1;
int firstNum = 0;
int secondNum = 1;
int result;
for (int i=2; i<=n; ++i)
{
result = firstNum + secondNum;
firstNum = secondNum;
secondNum = result;
}
return result;
}
二、位运算相关
二进制中1的个数
1、常规解法(计算次数较多)
int NumberOf1(int num)
{
int count = 0;
unsigned int flag = 1;
while (flag)
{
if (num & flag)
count++;
flag = flag<<1;
}
return count;
}
2、好的解法(有几个1比较几次)
int NumberOf1(int num)
{
int count = 0;
while (num)
{
count++;
num = num & (num - 1);
}
return count;
}
三、数值的整数次方
1、判断输入的合法性,equal(base, 0.0) && exp <0 不合法,注意判断base的时候不能直接 == ,浮点数要减去要比较的数和很小的一个数0.0000001比较 (>-0.0000001 && <0.00000001)
2、计算abs(exp),利用公式(exp偶数、奇数)两种情况,递归计算pow
3、判断exp的符号,若为负则需计算倒数