黑马程序员技术交流社区

标题: 递归调用出错了,求助!谢谢 [打印本页]

作者: 征服    时间: 2014-4-13 15:23
标题: 递归调用出错了,求助!谢谢
程序总是出错,可能是递归调用用错了,请帮助修改一下,谢谢!
class Test10
{
        public static void main(String[] args)
        {
               
                int[] arr=new int[100];
                for(int i=0;i<100;i++)
                {
                        arr[i]=i+1;
                }
                method(arr);
               
        }
        public static void  method(int a[])
        {
                int[] b = new int[(a.length-a.length/14)];
                int[] c = new int[(a.length-a.length/14)];
                int k=0;
                int s=0;
                while(a.length!=1)
                {
                        //获得数组b[]
                        for(int j=0;j<b.length;j++)
                        {
                                b[0]=1;
                                if(j!=0&&(j%13)==0)
                                {
                                        k++;
                                        b[j]=a[j+k];
                                       
                                }
                                else if((j%13)!=0)
                                {
                                        b[j]=a[j+k];
                                }                                
                        }


                        //获得数组c[]
                        for(int n=0;n<b.length;n++)
                        {
                                

                                if(n<b.length%13)
                                {
                                        c[n]=b[n+(b.length-b.length%13)];
                                }
                                else
                                {
                                                c[n]=b[s++];                                       
                                }
                        
                        }
               
               
                //把数组c[]传给method()方法,递归调用
                method(c);
                }
                if (a.length==1)
                {
                        System.out.println(a[0]);
                }
        }        
}
作者: 杨庆雷    时间: 2014-4-13 20:09
这样的话 会出现一个这样的错误  Exception in thread "main" java.lang.StackOverflowError  StackOverflowError是由于当前线程的栈满了  ,也就是函数调用层级过多导致。
比如死递归。  你这个就是死循环  method()调用自己  一直调用自己  method()后的代码执行不到
一直在上面循环
作者: 征服    时间: 2014-4-13 22:41
好的,谢谢!
作者: 郭珍    时间: 2014-4-15 12:17
一般不要出现死循环,注意调用的层次




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2