2014-10-03 25 views
0

我一直很想获得递归的一些手,但我似乎误解了它有人能解释一下这个程序的工作吗?

我读过一本书中的问题,我有点困惑,我不想抽筋,我想要一些与堆栈坚实的解释也即将连连调用的函数也

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

你能指出什么是你不明白的吗? – Tirath 2014-10-03 05:41:59

+0

输出是这个..'0 1 2 ..'。我想理解这个输出以及当'i == 0'和return语句被执行时会发生什么? – amol 2014-10-03 05:47:26

+0

这是嘲笑,你问的结果,stackoverflow是他们尝试的人。或具体的问题 – 2014-10-03 05:50:21

回答

1

递推方式重复的东西调用

这是传统的和重要的项目之一要学习如何 递归工作和?是递归和为什么 让我来计算阶乘 thier伪代码会是这样

功能因子的一个例子是:

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 *阶乘(N-1)],它称自己一遍又一遍

现在让我们考虑您的上下文

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

//这里要初始化的对象并调用它的构造和intializing 10

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

//这里具有尺寸数组你喜欢在位置0值[0每一个成员变量分配给一个特定的值] = 0

ob.printarray(10); //这里u的打印,你已经通过,现在重要的事情十个值的值,就会发生在这里

}} 现在 看的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]+" "); 
    } 

完蛋了,如果你有更多的查询问

+0

所以会发生什么是在i == 0条件到来后,栈被清空,我们得到的o/p? – amol 2014-10-03 06:45:36

+1

在i == 0如果你看看你的printarray(int i)方法在if条件中,它检查它并使其从else中退出,因为如果在该条件下,如果它转到else,它将printarray(-1)which是非法的,并使javaexcption或错误 – 2014-10-03 06:56:21

+0

它基本上没有得到特定的位置 – 2014-10-03 06:57:10

0

如果你必须了解递归,你可以看看这个堆栈溢出问题。

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

相关问题