Recursion 计算a^b的逻辑,功率是一个关键词吗?
我发现下面的代码是用来计算a^b的(破解编码面试,第六章大O)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*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=2和b=4=计算=幂(2,4)--大问题(原始问题)
现在我们将用较小的一个来表示这一点
i、 e2*幂(2,4-1)——相同类型的较小问题幂(2,3)
即a*功率(a,b-1)
如果一开始是为了控制基本情况,即当b在旁注上低于1时:尝试执行算法的试运行,即通过完成所有步骤跟踪其输出,这可能会帮助您更好地理解算法。谢谢!你知道功率部分(a,b-1)是如何计算功率的吗?我在括号内没有看到任何运算符,所以我不确定它是如何完成的。另外,如果没有for循环,它是如何通过b的所有值的?@legalalien我已经编辑了我的答案,以包括干运行,请看它是否有帮助。我在你的答案中添加了一个编辑,认为它是我的。请忽略它,很抱歉给您添麻烦。