这段代码中java.lang.stackoverflower错的原因是什么?

时间:2015-10-20 11:45:57

标签: java recursion

运行此代码后我得到java.lang.stackoverflower错的原因是什么?

class recursion {       
    public static int func(int n) {             
        int result;             
        result = func (n - 1);             
        return result; 
    } 
}  

class Output {         
    public static void main(String args[]) {             
        recursion obj = new recursion(); 
        System.out.print(obj.func(12)); 
     } 
} 

3 个答案:

答案 0 :(得分:7)

你没有停止条件。 你总是调用func (n - 1),因此在堆栈溢出之前会得到一个无限的递归调用链。

正确的递归方法必须具有停止条件。例如,停止条件可以是当n达到0时:

public static  int func (int n) {   
    if (n <= 0)
        return 1;          
    int result = func (n - 1);             
    return result; 
} 

答案 1 :(得分:0)

方法func何时停止?

您使用12调用它,然后返回无限递归。

在一个不相关的说明中:您应该看一下Java代码约定

答案 2 :(得分:0)

这是因为递归函数调用没有限制(终点)。 试试这个 -

class recursion 
{ 
    public static int func (int n) 
    { 
        int result = 0; 
        if(n > 0)
            result = func (n - 1);
        return result; 
    } 
}
class Output 
{ 
    public static void main(String args[]) 
    {  
        System.out.print(recursion.func(12)); 
    } 
} 

你应该用类名调用静态函数。