Algorithm 递归绘制幂(2,6)的重复平方图
我很难理解绘制递归重复方块图的过程 我有一本书,第210页显示了以下代码:Algorithm 递归绘制幂(2,6)的重复平方图,algorithm,recursion,data-structures,Algorithm,Recursion,Data Structures,我很难理解绘制递归重复方块图的过程 我有一本书,第210页显示了以下代码: 公共静态双电源(双x,整数n){ 如果(n==0) 返回1; 否则{ double partial=幂(x,n/2);//依赖于n的截断除法 双结果=部分*部分; if(n%2==1)//如果n为奇数,则包括x的额外因子 结果*=x; 返回结果; } } 和幂(2,13)的递归跟踪: 但不清楚他们如何在每一步中绘制和计算平方。 他们是如何跳过指数跳到不同的数字的? 我不知道他们是如何绘制上图的,也不知道幂(2,13)
公共静态双电源(双x,整数n){
如果(n==0)
返回1;
否则{
double partial=幂(x,n/2);//依赖于n的截断除法
双结果=部分*部分;
if(n%2==1)//如果n为奇数,则包括x的额外因子
结果*=x;
返回结果;
}
}
和幂(2,13)的递归跟踪:
但不清楚他们如何在每一步中绘制和计算平方。
他们是如何跳过指数跳到不同的数字的?
我不知道他们是如何绘制上图的,也不知道幂(2,13)的计算是如何绘制的。
有人能帮我解释一下这个概念吗?欢迎使用示例。您在递归跟踪中看到的数字差异来自代码中的
n/2
。它是一个整数除以2。所以13/2是6,6/2是3,3/2是1,最后1/2是0。这是从上到下阅读图表时看到的内容。该图显示这些条目越来越向右移动,以表示递归的深度。函数调用自身,然后再次调用自身,…等等。所有这些电话都挂起。。。每次这些调用传递的n
值都较小(减半)
在某个地方停下来。当然,它需要这样做。当n
的值接收到值0时,此操作停止。您可以在图表的底部看到这种状态。此时,递归不再深入并开始展开,您需要从下到上阅读图表。如果n
等于0,则返回值为1(return1
)
该值由函数执行读取,其中n
为1,调用power(2,0)
并等待返回值。结果它接收到1。然后对该值进行平方(partial*partial
),在本例中仍然为1。因为n
是奇数(这里是1),所以还有一个额外的乘法*=x
。所以我们实际上计算了partial*partial*x
,也就是1*1*2
。您将在图表中看到这一点
该值(2)返回到函数执行,其中n
为3,调用power(2,1)
。结果它收到2个。然后将该值平方(partial*partial
),在本例中为4。因为n
是奇数(这里是3),所以有一个额外的乘法*=x
。所以我们实际上计算了partial*partial*x
,也就是2*2*2
。您将在图表中看到这一点
我希望你能看到这种模式。对于结果挂起的函数执行,都会从所做的递归函数调用中获取它们的值,并与之相乘,然后将其返回给调用方
因此递归回溯到顶部,为顶级调用
power(2,13)
提供最终结果。虽然欢迎链接,但理解问题所需的信息应该嵌入到问题中,而不是链接后面。明白@trincott感谢您的深入解释。这比这本书要清楚得多。我完全理解你写的每一个字。谢谢你编辑我的问题。