Recursion java帮助中的递归

Recursion java帮助中的递归,recursion,java,Recursion,Java,我是新的网站,不熟悉如何和在哪里发布,所以请原谅。我目前正在学习递归,在理解这个程序的输出时遇到了困难。下面是方法主体 public static int Asterisk(int n) { if (n<1) return; Asterisk(n-1); for (int i = 0; i<n; i++) { System.out.print("*"); } System.out.println(); } 这是因为“星号(n-1)”位于for循环之

我是新的网站,不熟悉如何和在哪里发布,所以请原谅。我目前正在学习递归,在理解这个程序的输出时遇到了困难。下面是方法主体

public static int Asterisk(int n)
{
if (n<1)
return;

Asterisk(n-1);

  for (int i = 0; i<n; i++)
  {
      System.out.print("*");
  }
  System.out.println();
} 
这是因为“星号(n-1)”位于for循环之前

我认为输出应该是

****
***
**
*

这就是head递归的工作方式。对函数的调用是在执行其他语句之前进行的。所以,星号(5)在执行任何其他操作之前调用星号(4)。这进一步级联为来自Asterisk(3)的串行函数调用→ 星号(2)→ 星号(1)→ 星号(0)


现在,星号(0)只是在通过条件
n时返回,这就是head递归的工作方式。对函数的调用是在执行其他语句之前进行的。所以,星号(5)在执行任何其他操作之前调用星号(4)。这进一步级联为来自Asterisk(3)的串行函数调用→ 星号(2)→ 星号(1)→ 星号(0)


现在,星号(0)在通过条件
n时返回。有两种方法可以创建编程循环。一种是使用语言固有的命令循环(for、while等),另一种是使用函数(函数循环)。在您的示例中,介绍了两种循环

一个循环是展开函数

Asterisk(int n)
此展开使用递归,函数在其中调用自身。每个函数循环都必须知道何时停止,否则它将永远继续下去并炸毁堆栈。这称为“停止条件”。就你而言,它是:

if (n<1)
return;

if(n有两种创建编程循环的方法。一种是使用语言固有的命令式循环(for、while等),另一种是使用函数(函数式循环)。在您的示例中,介绍了两种循环

一个循环是展开函数

Asterisk(int n)
此展开使用递归,函数在其中调用自身。每个函数循环必须知道何时停止,否则它将永远继续并破坏堆栈。这称为“停止条件”。在您的情况下,它是:

if (n<1)
return;

if(n从堆栈的角度考虑递归调用。堆栈是一种添加到堆栈顶部的数据结构。现实世界中的类比是一堆碟形结构,其中最新的碟形结构位于顶部。因此递归调用会在堆栈顶部添加另一层,然后一旦满足阻止进一步递归调用的某些条件,堆栈就会启动放松一下,我们回到原来的项目(第一盘在一堆菜)

递归方法的输入趋向于基本情况,即终止因子,并防止方法无限期地调用自身(无限循环)。一旦满足此基本条件,该方法将返回一个值,而不是再次调用自身。堆栈就是这样展开的


在您的方法中,基本情况是$n以堆栈的形式考虑递归调用。堆栈是一种添加到堆栈顶部的数据结构。现实世界中的类比是一堆最新的盘位于顶部的盘。因此递归调用将另一层添加到堆栈顶部,一旦满足某些条件,就会阻止f在递归调用之后,堆栈开始展开,我们一路返回到原始项(盘子堆中的第一个盘子)

递归方法的输入趋向于基本情况,即终止因子,并防止方法无限期地调用自身(无限循环)。一旦满足此基本条件,该方法将返回一个值,而不是再次调用自身。堆栈就是这样展开的


在您的方法中,基本情况是$nIf
System.out.print(“*”);
出现在
Asterisk(n-1);
之前,输出将是您期望的结果。逻辑是这样的:
Asterisk(n)
Asterisk(n-1)
=>…=>
Asterisk(0)
=>打印
Asterisk(1)的语句
后面是打印语句的
星号(2)
后面是打印语句的
星号(n)
。基本上:
Asterisk(Asterisk(…Asterisk(1)))
,这里有
n
嵌套方法。如果你懂数学,你知道你从
星号(1)开始
并找出解决方法。如果您喜欢我们的任何一个答案,请不要忘记选择最佳答案。如果
System.out.print(“*”);
出现在
星号(n-1);
之前,输出将是您所期望的。逻辑是这样的:
星号(n)
=>
星号(n-1)
=>
星号(n-1)=>(0)
=>打印
星号(1)
的语句,然后打印
星号(2)
的语句,然后打印
星号(n)
。基本上:
星号(星号(…星号(1)…))
,这里有
n
嵌套方法。如果你懂数学,你就知道你是从
星号(1)
开始的。如果你喜欢我们的任何一个答案,请不要忘记选择最好的答案。