当前位置: 首页 > 知识库问答 >
问题:

有人能解释一下这种模式打印方法中递归的逻辑吗?

韩瀚
2023-03-14

我试图拼凑这个例子中的逻辑。这是正常的代码。仅供参考,我有一个大学导师帮我做这个例子,但他仍在试图找出如何向我解释它。代码也做好了,这个只是为了自己的递归知识。

public class Practice {

    public static void printTriangle(int n) { 

        if (n < 1) { 
            return; 
            
        } 
        else {
            
        printTriangle(n - 1); 
        printStars(n); 
        System.out.println();
        }
    } 
    public static void printStars(int n) {
        if (n > 0) {
        System.out.print("*");
        printStars(n-1);
        }
    }
    public static void main(String[] args) {
        printTriangle(5);
    }
}
 Output
*
**
***
****
*****

这是带有标记的测试代码,我用它来找出什么时候发生了什么。这有点碍眼,所以如果你认为不用看这一团糟就可以解释的话,那一定要。

public class Practice {

    public static void printTriangle(int n) { 

        if (n < 1) { 
            System.out.println(n);
            
            return; 
            
        } 
        else {
        System.out.println("1");
        printTriangle(n - 1); 
        System.out.println(n);
        printStars(n);
        System.out.println("A");
        }
    } 
    public static void printStars(int n) {
        if (n > 0) {
        System.out.print(n);
        System.out.print("*");
        printStars(n-1);
        }
    }
    public static void main(String[] args) {
        printTriangle(5);
    }
}
1
1
1
1
1
0
1
1*A
2
2*1*A
3
3*2*1*A
4
4*3*2*1*A
5
5*4*3*2*1*A

直到第一颗星星印出来我才明白。在printTriangle方法将其减至0后,我打印了n的值,然后在打印第一颗星之前打印了n值,不知何故,它等于1。我只是好奇n的值是如何增加的。该值在1处进入printStars方法,并在打印星星时不断增加

共有2个答案

唐煜
2023-03-14

printTriangle(5) 调用 printTriangle(4)
printTriangle(4) 调用 printTriangle(3)
printTriangle(3) 调用 printTriangle(2)
printTriangle(2) call printTriangle(1) printTriangle(1) call printTriangle(0)
printTriangle(0) printTriangle(0) 不执行任何操作,但返回到 printTriangle(1)

printTriangle(1)继续调用printStars(1)
printStars(1)打印一个星号并调用printStars(0)
printStars(0)不执行任何操作并返回到printStars(1)
printStars(1)不执行任何操作并返回到print triangle(1)< br > print triangle(1)打印一个换行符并返回到printTriangle(2)

printTriangle(2)继续调用printStars(2)
printStars,(2)打印一个星并调用PrintStar(1)
printStars(1)打印一颗星并调用printStars(0)
,printStars(0)什么都不做并返回printStars(
打印星(1)没有更多的事情要做,并返回printStars(
PrintStar,(2)没有更多事情要做并返回到PrintTriangel(2)
PrintTriangles(2)打印换行并返回到printTriangle(3)

...

寇照
2023-03-14

我希望通过提供书面和视觉解释来回答您的问题:

书面:

首先,我们从 printTriangle(5) 开始。自 n

从< code>printTriangle(1)我们转到< code>printStars(1)。我们只能从这里印出一颗星星。这样做之后,我们打印一个换行符。接下来,我们有< code>printTriangle(2)引导我们进入< code>printStars(2)。这给出了1个星号,但是导致< code>printStars(1)给出了第二个星号和一个换行符。这个过程一直持续到我们达到5颗星。

视觉表现:

我希望这有助于回答你的问题!如果你需要进一步的澄清或细节,请告诉我:)

 类似资料:
  • 我是 java 初学者,我很难理解这段代码,它确实打印了 22 个,但我没有得到它背后的逻辑,如果我必须更多地了解它们,这些叫什么。 有没有类似的逻辑,我应该留意,任何建议都会有所帮助。非常感谢。

  • 我这里有一些关于Java的练习问题。我们应该在不使用编译器的情况下确定答案。 参考以下方法: 调用product(6)时的输出是什么? D)48 E)70 根据答案,正确的输出是48。我真的不明白为什么这是真的。6不符合基本情况,所以转到else语句。那么,乘积(6-2)=乘积(4),乘积(2)得到乘积(0),乘积(2)得到乘积(0),得到6*4,4*2,2*0,0*0。但那是32,不是48?是不

  • 对于下面的方法,调用神秘(45)时,输出为“1 0 1 1 0:2 5 11 22 45”,我明白为什么“1 0 1 1 0:”打印出来,但不明白冒号后“2 5 11 22 45”是怎么打印出来的,有人能给我解释一下吗?我试着写出来,但就是想不通。

  • 我试图从Leetcode解决这个问题https://leetcode.com/problems/count-good-nodes-in-binary-tree/ 这是我的解决方案:我无法理解为什么这个递归是来自根的计数值。左节点在遍历根时不起作用。正当据我所知,我是 检查当前节点是否良好并更新计数和列表 遍历左节点更新计数 上面的count应该在遍历右节点时进入右节点并更新计数值,但没有发生 为什

  • 我是Hibernate和JPA的新手,我对这个注释有问题。有人能简单地解释一下这个注释到底在做什么吗?因为在这种情况下,文档对我来说很难理解。 编辑我明白什么是持久上下文,但在代码中,我有这样的例子: 我对@PerustenceContext做什么有问题。抱歉,也许我没有具体说明。

  • 我想写一个brainfuck口译员,但我错过了一些上下文或其他东西。应该被调用以处理“