【问题标题】:Can somebody explain me the working of this program with stacks?有人可以用堆栈解释我这个程序的工作原理吗?
【发布时间】:2014-11-28 04:50:32
【问题描述】:

我一直很想了解递归,但我似乎误解了它

我在一本书中读过一个问题,我有点困惑,我不想抽筋,我想要一些关于堆栈的可靠解释,也关于函数的调用

class rectest
{
int values[];

rectest(int i)
{
    values = new int[i]; 
}

 void printarray(int i)
  {
    if(i==0)
        return ; 
    else printarray(i-1);
    System.out.print(values[i-1]+" ");
  }
 }

public class recursion 
{
  public static void main(String args[])
   {
    rectest ob = new rectest(10);
    int i ; 
    for(i=0 ; i<10 ; i++)
        ob.values[i] = i ;
    ob.printarray(10);
   }
}

【问题讨论】:

  • 你能指出你不明白的地方吗?
  • 输出是这个 .. 0 1 2 .. 。我想了解这个输出以及i==0 和 return 语句执行时会发生什么?
  • 这是你在为 stackoverflow 为他们尝试的结果而询问的结果。或具体说明问题
  • 我不是在问结果 .. 我可以得到 o/p .. 我想要的只是它背后的概念
  • 递归:名词,见“递归”。

标签: java function recursion stack


【解决方案1】:

RECURSION意味着一次又一次地重复调用任何东西

这是学习如何学习的传统且重要的程序之一 递归工作和?是递归以及为什么 让我举一个计算阶乘的例子 他们的伪代码会是这样的

函数阶乘是:

input: integer n such that n >= 1
output: [n × (n-1) × (n-2) × … × 1]

    1. if n is >= 1, return [ n × factorial(n-1) ]
    2. otherwise, return 1

end factorial

现在这里发生的是它总是返回 [n*factorial(n-1)] 一遍又一遍地调用自己

现在让我们考虑一下你的上下文

 public class recursion 
    {
      public static void main(String args[])
       {
        rectest ob = new rectest(10);

//这里你正在初始化对象并调用它的构造函数并初始化大小为10的数组

int i ; 
for(i=0 ; i<10 ; i++)
    ob.values[i] = i ;

//在这里,您将每个成员变量分配给某个值,例如位置 0 value[0]=0

ob.printarray(10); //这里你正在打印你现在传递的十个值的值重要的事情发生在这里

} } 现在看看printarray() 方法 这里

void printarray(int i)
  {
    if(i==0)
        return ; 
    else printarray(i-1);
//printarray(i-1) here it calls the method itself so as to print all the values recursively 
    System.out.print(values[i-1]+" ");
  }

如果你有更多的问题,那就这样吧

【讨论】:

  • 那么在 i==0 条件到来之后会发生什么,堆栈被清空并且我们得到了 o/p ?
  • at i==0 如果您在 if 条件下查看 printarray(int i) 方法,它会检查该方法并使其从 else 中退出,因为如果在该条件下,如果它转到 else 它将 printarray(-1) 这是非法的,并使 javaexcption 或错误两者
  • 基本上是没有得到那种特殊情况
【解决方案2】:

如果您必须了解递归,可以查看此堆栈溢出问题。 What is recursion and when should I use it?

如果你想更好地理解java中递归的实现,这里是另一个堆栈溢出问题。How is recursion implemented in Java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-11
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2023-03-03
    • 2021-08-02
    相关资源
    最近更新 更多