使用字符串和整数进行递归的程序流程

时间:2014-02-05 03:48:24

标签: java string recursion

我不明白这是如何运作的。我知道基本的事实递归,但这是一种混合型。有人可以根据这个确切的代码片段逐步解释输出结果吗?即使只是一些第一个值(在代码末尾注释)?

谢谢:)

public class recursion1st
{
    public static String recFun(int x)
    {
        if (x <= 0) return "/";
        return recFun(x-3) + x + recFun(x-2) + x;
    }
    public static void main(String[] args)
    {
        System.out.println(recFun(8));
    }
}
//Produces '/2/25/3/1/1358/3/1/136/1/14/2/2468 '(?)

3 个答案:

答案 0 :(得分:0)

在main函数中,它调用 recFun()来打印数据。在该函数中,它是递归的,第一个 if 条件是在满足该条件时(当x为负或等于零时)突破递归。 否则它将返回一个字符串,反过来再次调用自己。

这里,在第一次返回时,它调用recFun(5)和recFun(6),同样,如果逐步分析,循环将继续,直到满足中断条件。返回语句基本上是字符串的连接,它通过在突发递归时放置“/”来分隔数据。

修改 return语句返回的值是

 rec(5)+8+rec(6)+8......(1)

,其中

rec(5) returns rec(2)+5+rec(3)+5......(2)

rec(6) returns rec(3)+6+rec(4)+6.......(3)

其中

rec(3) returns "/"+3+rec(1)+3.......(4)

rec(4) returns rec(1)+4+rec(2)+4.....(5)

rec(2) returns "/" +2 +"/"+2.....(6)

rec(1) returns "/"+1+"/"+1 .......(7)

(5)中的替代(7)和(6)

(4)中的替代(7)

(3)中的替代(4)和(5)

(2)中的替代(4)和(6)

并替换(1)中的(2)和(3)

您需要一张表格。尝试使用它来解决它。希望能帮助到你。 :)

答案 1 :(得分:0)

3 |函数采用int参数

5 |这是你的基本情况,返回&#34; /&#34;如果...

6 |这是你的递归,调用recFun(x-3)+ x / *这是你当前的值* / recFun(x-2)+ x。基本上这将会发生,直到你的x达到0或更低。请注意,正确的根递归调用将在它到达基本情况之前经历更多递归,因为它每次都传递x - 2而不是x-3。还要实现这个语句递归调用两次。

在一张大纸上制作一张图表并绘制出8英寸的地图:

8

根 return recFun(5)+ 8 + recFun(6)+ 8

第一个分支 return recFun(2)+ 5 + recFun(3)+ 8

第二个分支 return recFun(3)+ 6 + recFun(4)+ 6 ....................... 继续前进将变得清晰。

答案 2 :(得分:0)

拿一篇论文逐步写下函数的作用:

                                     recFun(5)                    
                                        | 
                       recFun(2)   +    5   +    recFun(3)+5     
                         |                          |
              recFun(-1)+2+recFun(0)+2    recFun(0)+3+recFun(1)+3 
                   |           |             |           |
                  "/"         "/"           "/" recFun(-2)+1+recFun(-1)+1
                                                   |            |
                                                  "/"          "/"

1 使用5

调用recFun

2 5导致recFun与2&amp; recFun with 3

3 2导致recFun与-1&amp; recFun为0,3导致recFun为0&amp; recFun with 1

4 -1导致“/”,0导致“/”,0导致“/”,1导致recFun与-2&amp; recFun(-1)

5 -2导致“/”,-1导致“/”

直到每个单一调用都完成执行(直到x <= 0并且返回“/”)之前没有进行任何调用将返回任何内容。该函数开始从该调用链的末尾返回字符串(在此金字塔中:从下到上和从右到左)

                  / 1 / 1
    / 2 / 2   / 3         3
            5               5
->  / 2 / 2 5 / 3 / 1 / 1 3 5

我知道,递归令人困惑。唯一可以帮助我的是:首先进行递归函数的每次最后一次调用,并且只有当最后一次调用返回任何内容然后回滚时。对不起,如果这不是更精确:)