Recursion 计算a^b的逻辑,功率是一个关键词吗?

Recursion 计算a^b的逻辑,功率是一个关键词吗?,recursion,syntax,logic,keyword,pseudocode,Recursion,Syntax,Logic,Keyword,Pseudocode,我发现下面的代码是用来计算a^b的(破解编码面试,第六章大O) 返回a*power(a,b-1)的逻辑是什么?是递归吗 什么的 power在这里是关键字还是伪代码? int power(int a, int b) { if (b < 0) { return a; // error } else if (b == 0) { return 1; } else { return a

我发现下面的代码是用来计算a^b的(破解编码面试,第六章大O)

  • 返回a*power(a,b-1)的逻辑是什么?是递归吗
    什么的
  • power在这里是关键字还是伪代码?
    int power(int a, int b) 
           { if (b < 0) {
              return a; // error 
           } else if (b == 0) {
               return 1; 
           } else {
               return a * power(a, b - 1); 
           }    
       }
    
    intpower(inta,intb)
    {if(b<0){
    返回一个;//错误
    }else如果(b==0){
    返回1;
    }否则{
    返回a*功率(a,b-1);
    }    
    }
    

power
这里只是定义的函数名,而不是关键字

现在,考虑一下你想找到<代码> 2 ^ 10 <代码>。你可以写与

2*(2^9)
与2*2*(2^8)
,与
2*2*2*(2^7)
一样的东西,依此类推,直到
2*2*2*2*2*2*2*(2^1)

这就是
a*power(a,b-1)
以递归方式所做的

下面是查找
2^4
的代码的试运行: 函数的初始调用将是
power(2,4)
,完整的堆栈跟踪如下所示

power(2,4) ---> returns a*power(2,3), i.e, 2*4=16
    |
power(2,3) ---> returns a*power(2,2), i.e, 2*3=8
    |
power(2,2) ---> returns a*power(2,1), i.e, 2*2=4
    |
power(2,1) ---> returns a*power(2,0), i.e, 2*1=2
    |
power(2,0) ---> returns 1 as b == 0

这是一个递归函数。也就是说,函数是根据自身来定义的,其基本情况是防止递归无限期运行

power
是函数的名称


例如,
4^3
等于
4*4^2
。也就是说,提升到三次方的
4
可以通过乘以提升到二次方的
4
来计算。而
4^2
可以计算为
4*4^1
,可以简化为
4*4
,因为递归的基本情况指定
4^1=4
。将这两者结合起来,
4^3=4*4^2=4*4*4^1=4*4*4=64

电源只是功能的名称。
这是递归,因为我们用类似类型的较小问题来表示给定问题。

a=2b=4=计算=幂(2,4)--大问题(原始问题)
现在我们将用较小的一个来表示这一点
i、 e2*幂(2,4-1)——相同类型的较小问题幂(2,3)
a*功率(a,b-1)


如果一开始是为了控制基本情况,即当b在旁注上低于1

时:尝试执行算法的试运行,即通过完成所有步骤跟踪其输出,这可能会帮助您更好地理解算法。谢谢!你知道功率部分(a,b-1)
是如何计算功率的吗?我在括号内没有看到任何运算符,所以我不确定它是如何完成的。另外,如果没有for循环,它是如何通过b的所有值的?@legalalien我已经编辑了我的答案,以包括干运行,请看它是否有帮助。我在你的答案中添加了一个编辑,认为它是我的。请忽略它,很抱歉给您添麻烦。