2016-12-04 42 views
-2
class Rec 
{ 
    public int pattern(int n) 
    { 
     if(n>=1) 
     return pattern(n-5); 
     else 
     return pattern(n+5); 
    } 
    public static void main(String args[]) 
    { 
     int a=16; 
     Rec ob=new Rec(); 
     System.out.print("16\t"+ob.pattern(a)); 
    } 
} 

以上是我的代码,它编译成功,但没有给出任何输出。如何打印模式16 11 6 1 -4 1 6 11 16在java中使用递归?

+1

问题是什么?什么不行?请访问[帮助]并阅读[问]以了解如何有效地使用本网站。看看你的代码,问自己你在哪里打印任何东西。 –

+0

“不给任何输出”?它不是抛出StackOverflowError异常吗? – YoungSpice

+0

任何递归方法都需要一个“基本情况” - 一种逃避重复调用方法的方式。 –

回答

1

你的代码没有办法逃脱。换句话说,它会一直不停地调用自己,这意味着什么都不会发生,调用方法将继续添加到堆栈中。因此,为了避免这种情况的发生,您可以创建一个类级别的变量并在每次调用该方法时增加它,并且在该方法内部添加一个条件语句,该语句只会在该变量位于时才会再次运行该方法,但是,这仍然会让你面对另一个问题。你的模式方法只返回一个整数,这意味着所有打印输出的是16,然后是你的方法的所有调用的最终结果。为了解决这个问题,你可以将println语句放在你的模式方法中,或者你可以设置模式方法,以便它返回一个整数字符串,然后打印出来。

0

更改模式函数,因为它永远不会退出递归。 因为无论n的值是函数调用本身。所以没有任何输出模式函数调用继续。 有一件事你可以试试这个:

public int pattern(int n) 
{ 
    if(n>=-4){ 
     System.out.print(""+n+"\t"); 
     pattern(n-5); 
     if(n!=-4)System.out.print(""+n + "\t"); 
    } 
    return 0; 
} 

输出: 16 11 6 1 -4 1 6 11 16