有人可以使用值(1,1)跟踪我

时间:2014-01-19 19:56:50

标签: java function recursion

我在模拟编程考试中得到了这个,我对这种类型的东西不太好,有人可以向我解释如何通过以下方式进行操作吗?如果您觉得它更好地解释了,请将值更改为问题中的值。这是真正让我失望的最后一个。谢谢你的帮助。

public int function( int a, int b)
{
    if (a<=0){
        return b;
    }
    else if (b<=0)
    {
        return function( a-2, 0);
    }
    else
    {
        return function (function (a-1, b-1), b-1);

    }

2 个答案:

答案 0 :(得分:2)

我将您的(1,1)解释为a = 1b = 1。那说:

a = 1 > 0,输入条件为false,因此不采用第一个分支:

if (a<=0)

我们继续直到第二个分支。 b = 1 > 0输入条件再次为假,因此我们不会采用此分支:

else if (b<=0)

最终,我们到达了else分支,我们接受了:

else

所以我们登陆这一行:

    return function (function (a-1, b-1), b-1);

这里有一个递归!第一个电话是function (a-1, b-1),因此我们使用functiona = 1 - 1 = 0致电b = 1 - 1 = 0。让我们再次重新开始:

a = 0,所以我们选择第一个分支:

if (a <= 0)

我们返回b = 0

现在,是第二次递归的时候了。我们有a = function(a - 1, b - 1) = 0b = 1 - 1 = 0。它仍然是a = 0b = 0,因此结果将是0,如上所述。

最后,我们返回0

答案 1 :(得分:1)

好的,我将逐步介绍其他值,以便您自己学习如何操作。

让我们以值2,2为例。

检查第一个if语句(if (a<=0))以查看其是否有效

a=2所以请使用值a

替换2

2 <= 0?不。让我们进入下一个声明

else if (b<=0) 注意:else if本质上是一个语句,如果先前的if语句失败,则使用它。

b = 22<=0?不。到下一个!

else处理在第一个if和所有诉讼else ifs

下失败的所有内容

所以只需插入值即可。

a = 2 b = 2
return function (function (a-1, b-1), b-1);

- &GT;

return function (function (2-1, 2-1), 2-1); 
-> return function (function (1, 1), 1);

你可以通过两种方式继续反复或逻辑思考它。

现在......让我们在这里开始注意一个模式并寻找一个基本情况(通常用于这些递归函数),所以你注意到第一个if语句中的return b将始终是实际的返回结果结束,所有其他反复发生的事情将取决于结果,因为这是你将返回的唯一真正价值。现在我们已经确立了 我们怎样才能达到这个价值?如果声明a<=0是到达那里的唯一方法。你开始注意到这些关系。


输入a <= ba <= 0输出b

输入a > 0 a > b输出0