Recursion 递归伪代码:打印语句的执行顺序

Recursion 递归伪代码:打印语句的执行顺序,recursion,pseudocode,Recursion,Pseudocode,我不确定下面的代码将打印出什么。有人能尽可能详细地解释一下吗?这是递归吗 void h ( int n ) if ( n >= 4 ) h ( n / 2 ) end if print n end h 执行调用h(16)时打印什么?为什么不查看程序的输出以获得一个小的整数值,例如n==42?下面是伪代码的Python实现: def h(n): if n >= 4: h(n/2) print(n) 我假设n/2在这

我不确定下面的代码将打印出什么。有人能尽可能详细地解释一下吗?这是递归吗

void h ( int n )
   if ( n >=  4 )
      h ( n / 2 )
   end if 
   print n 
end h

执行调用h(16)时打印什么?

为什么不查看程序的输出以获得一个小的整数值,例如
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)
通过打印42完成呼叫链。因此,为了总结
h(n)
所做的工作:
h(n)
将连续将
n
除以2,直到
n<4
,然后按相反顺序打印这些分割的结果


您应该能够计算出现在将打印什么
h(16)

我们不能用伪代码回答这个问题。每种语言可能会以不同的方式处理参数。打印出来的是什么?为什么?这是一个练习题,我很难理解。正如我已经说过的,我们不能回答这个问题。不过,您之前的问题及其答案应该对您有所帮助。你需要知道
int n
是通过引用还是通过值传递的,而从伪代码中不可能知道这一点。@AndrewBarber:你可以用什么语言通过引用传递
n/2
?@indiv这实际上是一个很好的补充,我错过了那个细节。我要重新打开,你可以考虑那样回答。有鉴于此,我认为这很可能是一个不同的问题。