算法设计技术

时间:2016-06-09 15:59:46

标签: algorithm recursion

通过公式2 ^ n = 2 ^(n-1)+ 2 ^(n-1)设计用于计算任何非负整数n的2 ^ n的递归算法。 先决条件:必须执行添加操作

int computepowerOfTwo(int power) {
    if(power == 1) 
        return 1;
    else 
        return (2*computepowerOfTwo(power-1))  + (2*computepowerOfTwo(power-1)) 
}

当我最初供电为3时,它返回16

2 个答案:

答案 0 :(得分:2)

正如其他答案所指出的,2^12,而不是1

...但您的代码实际应停在0处:

if(power == 0) 
    return 1;

这是学习单元测试价值的好机会。一个简单的测试案例如下......

for i in range(0, 11):                                                       
    assert computepowerOfTwo(i) == 2 ** i  

...会告诉您(1)您没有处理0的情况,(2)您对2^1的回答是错误的。

答案 1 :(得分:0)

代码中的错误: -

  1. if(power == 1)您应该返回2^1 2
  2. else部分中您返回的内容相当于2*2^(power-1) + 2*2^(power-1),这将导致2 ^(n + 1)这是错误的,因此您应该返回2*2^(power-1)
  3. 根据您的问题,您的功能应如下: -

    int computepowerOfTwo(int power) {
        if(power == 0) 
            return 1;
        else 
            return computepowerOfTwo(power-1) + computepowerOfTwo(power-1);
    }