Java 理解这个递归函数

Java 理解这个递归函数,java,recursion,Java,Recursion,各位程序员好 一段时间以来,递归编程一直是我最不了解的事情之一。正因为如此,我决定,我需要一些时间,理解和编程一些基本的例子。问题是我解决了这个任务,但不太明白它是如何工作的 如果有人能帮我理解,我将不胜感激 提前谢谢 泰尔曼 任务: 多米诺彩饰的尺寸为2*1。板的长度为n,宽度为2。创建一个递归方法,返回路径数,而一块板可以被多米诺图覆盖 我的方法: public static int dominobrik(int n){ int sum; if(n >= 0 &a

各位程序员好

一段时间以来,递归编程一直是我最不了解的事情之一。正因为如此,我决定,我需要一些时间,理解和编程一些基本的例子。问题是我解决了这个任务,但不太明白它是如何工作的

如果有人能帮我理解,我将不胜感激

提前谢谢

  • 泰尔曼
任务:

多米诺彩饰的尺寸为2*1。板的长度为n,宽度为2。创建一个递归方法,返回路径数,而一块板可以被多米诺图覆盖

我的方法:

public static int dominobrik(int n){
    int sum;

    if(n >= 0 && n <= 2){
        sum = n;
    } else {
        sum = dominobrik(n-1) + dominobrik(n-2);
    }

    return sum;

}
publicstaticintdominobrik(intn){
整数和;

如果(n>=0&&n在基本情况下,其中
n=1
,则只有一种方法可以在板上水平排列多米诺骨牌。其中
n=2
,有两种方法可以排列多米诺骨牌。您可以垂直排列,也可以水平排列

对于
n=3
的情况,有3种方法:

  • 1个水平穿过顶部,2个垂直下方
  • 1个水平穿过底部,2个垂直上方
  • 或全部3个水平堆叠
  • 请注意,在
    n=3
    案例中,您重复了
    n=2
    案例中的两种安排,但除了这些安排之外,您还添加了
    n=1
    案例中的安排。回想一下
    n=1
    的唯一有效安排是一个水平多米诺骨牌。
    n=3
    中的每种情况至少有一个ho里桑塔尔骨牌

    您可以将此扩展到
    n=4
    的情况。针对
    n=3
    采取上述所有可能的组合,然后添加
    n=2
    的所有组合,并根据问题的约束条件适当地堆叠它们


    我希望我能说明这一点,但在一些方格纸上画出来可能会有帮助。

    在基本情况下,当
    n=1
    时,只有一种方式可以在板上排列多米诺骨牌,那就是水平排列。当
    n=2
    时,有两种方式可以排列多米诺骨牌。可以同时垂直排列,也可以同时水平排列y

    对于
    n=3
    的情况,有3种方法:

  • 1个水平穿过顶部,2个垂直下方
  • 1个水平穿过底部,2个垂直上方
  • 或全部3个水平堆叠
  • 请注意,在
    n=3
    案例中,您重复了
    n=2
    案例中的两种安排,但除了这些安排之外,您还添加了
    n=1
    案例中的安排。回想一下
    n=1
    的唯一有效安排是一个水平多米诺骨牌。
    n=3
    中的每种情况至少有一个ho里桑塔尔骨牌

    您可以将此扩展到
    n=4
    的情况。针对
    n=3
    采取上述所有可能的组合,然后添加
    n=2
    的所有组合,并根据问题的约束条件适当地堆叠它们


    我希望我能说明这一点,但在方格纸上画出来可能会有帮助。

    我不能说你知道
    n
    的答案,你想要
    n+1
    的答案

    对于
    n
    的一些解决方案,最后一个多米诺骨牌垂直放置,而对于其他解决方案,最后两个多米诺骨牌水平堆叠,一个叠在另一个上面

    如果最后两个多米诺骨牌是水平的,你所能做的就是垂直添加你的
    n+1
    多米诺骨牌。但是如果最后一个多米诺骨牌是垂直的,那么你也可以垂直添加它,或者你可以用上一个多米诺骨牌水平翻转它

    我不仅要跟踪给定的
    n
    有多少个解决方案,还要跟踪其中有多少以最后一个domino水平/垂直终止


    我会让你算出剩下的,因为这是家庭作业。而且我还没有真正算出完整的解决方案。它可能与你发布的解决方案等效。

    我不会说你知道
    n
    的答案,你想要
    n+1
    的答案

    对于
    n
    的一些解决方案,最后一个多米诺骨牌垂直放置,而对于其他解决方案,最后两个多米诺骨牌水平堆叠,一个叠在另一个上面

    如果最后两个多米诺骨牌是水平的,你所能做的就是垂直添加你的
    n+1
    多米诺骨牌。但是如果最后一个多米诺骨牌是垂直的,那么你也可以垂直添加它,或者你可以用上一个多米诺骨牌水平翻转它

    我不仅要跟踪给定的
    n
    有多少个解决方案,还要跟踪其中有多少以最后一个domino水平/垂直终止


    我会让你弄清楚其余的,因为这是家庭作业。而且我还没有真正弄清楚完整的解决方案。它可能会与你发布的解决方案等效。

    为了帮助人们理解这种递归调用,我真的认为很好地打印出来真的很有帮助

    程序的输出已根据递归深度缩进

    以下是在执行以下操作时,为获得宽度为5的所有解决方案而采用的8条路径:

    dominobrik(n-2) + dominobrik(n-1)
    
    (注意,对于每个新路径,递归调用首先添加两个水平部分(如果可能的话)

    (还要注意,这与您发布的代码不同,您先编写(n-1)然后再编写(n-2),但实际上变化不大)


    为了帮助人们理解这种递归调用,我真的认为很好地打印出来真的很有帮助

    程序的输出已根据递归深度缩进

    以下是在执行以下操作时,为获得宽度为5的所有解决方案而采用的8条路径:

    dominobrik(n-2) + dominobrik(n-1)
    
    (注意,对于每个新路径,递归调用首先添加两个水平部分(如果有)