了解多重递归

时间:2018-12-12 14:02:31

标签: java

在上一次考试中遇到的问题,我需要帮助。

  

通过调用pX(7)编写以下方法的执行输出。

  public static void pX(int x) { 
       if (x > 1) { 
        pX(x/2);   
        pX(x/2);  
       }  
       System.out.println(x); 
    } 

当方法两次调用自身时,我不理解递归。

1 个答案:

答案 0 :(得分:1)

递归是当方法或函数调用自身时。

Multiple Recursion是方法或函数包含多个自引用时。这是有点棘手的时候。让我们看一下您的示例。

您调用px(7),由于条件检查时参数超过了1的值,它将进入该代码块并遇到第一个递归调用,将参数除以一半, px(7/2),其结果为px(3)(四舍五入为整数)。

现在您已经输入了第一个递归呼叫,让您的原始呼叫搁置一秒钟,然后专注于px(3)的新呼叫。您的条件确定x仍大于1,因此我们在此调用中遇到了 first 递归。因此,我们再次调用自己,将参数px(3/2)除以一半,得出px(1)(再次取整)。

现在我们的条件将不再通过,因此在此迭代中将没有递归调用,我们将直接转到System.out.println(x);并打印出值1

返回到px(3/2)的调用位置,这种情况下的下一行将再次执行。因此,我们再次调用px(3/2)

仍然,我们的条件不会通过,因此我们将不再调用任何递归调用,而直接转到System.out.println(x);

再次返回到第二个px(3/2)的调用位置。我们已经完成了条件块,最终可以调用System.out.println(3);

这是输出中的前三行1,1,3

这可能有点棘手,但是您需要集中精力,留住并关注通话堆栈,才能真正解决问题。