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在递归调用之后,堆栈开始展开,我们一路返回到原始项(盘子堆中的第一个盘子)
递归方法的输入趋向于基本情况,即终止因子,并防止方法无限期地调用自身(无限循环)。一旦满足此基本条件,该方法将返回一个值,而不是再次调用自身。堆栈就是这样展开的
在您的方法中,基本情况是$nIfSystem.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)
开始的。如果你喜欢我们的任何一个答案,请不要忘记选择最好的答案。