我不确定下面的代码会打印出来。有人可以请尽可能详细解释吗?这是递归吗?
void h ( int n )
if ( n >= 4 )
h ( n / 2 )
end if
print n
end h
执行呼叫h(16)时打印的内容是什么?
答案 0 :(得分:1)
为什么不查看程序输出的小整数值,比如说n == 42
?这是伪代码的Python实现:
def h(n):
if n >= 4:
h(n/2)
print(n)
我假设n/2
在这里意味着浮点除法,那部分不清楚你的伪代码。 h(42)
将推出:
2.625
5.25
10.5
21.0
42
以下是发生的事情:首先n
是42,42 >= 4
。因此,h(21)
被调用。 21 >= 4
,因此h(10.5)
被调用。 10.5 >= 4
,因此h(5.25)
被调用。 5.25 >= 4
,因此h(2.625)
被调用。最后是2.625 < 4
,因此没有对h
的另一次调用。相反,打印2.625。现在h(2.625)
已完成,h(5.25)
可以继续并打印5.25
,依此类推,直到h(42)
通过打印完成调用链。所以总结一下{{1} } {}} h(n)
将继续将h(n)
除以2,直到n
,然后以相反的顺序打印这些分割的结果。
您应该能够找出n < 4
现在打印的内容。