【问题标题】:Algorithm design technique算法设计技术
【发布时间】:2016-06-10 02:43:17
【问题描述】:

设计一个递归算法,通过公式 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

【问题讨论】:

  • 请出示您遇到问题的代码?
  • 我的意思是编辑原始帖子并显示您编写的代码... :)

标签: algorithm recursion


【解决方案1】:

正如另一个答案指出的那样,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 的回答是错误的。

【讨论】:

  • ohh.. 更改 IF 条件后,代码片段是否返回有效答案
【解决方案2】:

代码中的错误:-

  1. if(power == 1) 你应该返回2^1 这是2
  2. else 部分中,您返回的内容等同于2*2^(power-1) + 2*2^(power-1),这将导致 2^(n+1) 错误,因此您应该只返回2*2^(power-1)

根据您的问题,您的功能应如下所示:-

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

【讨论】:

  • 要找到 2 的幂,您应该使用上述逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 2018-08-17
相关资源
最近更新 更多