" StackOverflow的"在Java中使用Recursion时出错

时间:2017-03-19 18:15:44

标签: java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package plaindromenumbers;

import java.util.Scanner;

/**
 *
 * @author taha
 */
public class PlaindromeNumbers {

    /**
     * @param args the command line arguments
     */

    int func1(int n)
    {
        if(n==1)
            return 1;

        return n*func1(n-1);
    }

    static boolean check=false;
    int func(int no)
    {

        String a=""+no;

        String reverse = new StringBuffer(a).reverse().toString();

        if(a.equals(reverse))
        {

            if(!a.contains("0"))
            {
               System.out.println("hey");
                check=true;
                return Integer.parseInt(a);
            }

        }

          //  else
          //  {
        func(no++);
        if(check==true)
        {
            return 0;
        }
           return 0;   
       }
    public static void main(String[] args) {
        // TODO code application logic here
        Scanner in=new Scanner(System.in);
        System.out.println("Enter testcase");
       int testcase=in.nextInt(); 
       while(testcase>0)
       {
         int a=in.nextInt();
         PlaindromeNumbers obj=new PlaindromeNumbers();
           System.out.println(obj.func(a));
           testcase--;
       }
    }

}

2 个答案:

答案 0 :(得分:1)

您需要返回func(no + 1),这样您的代码将返回下一个回文数(我假设您希望代码执行此操作?)。不需要check。当代码甚至不使用时,为什么要包含func1

顺便说一下,堆栈溢出是由func的无限递归引起的。

答案 1 :(得分:1)

问题在于:

func(no++);

我们说no是32.这会将32传递给func然后递增它。这意味着您再次使用值32调用该函数。当该函数点击此行时,它将再次将该32传递给func。因此,一个无限的递归循环。

您可以像这样修复此错误:

func(++no);

现在,在调用no之前,它会增加func no将是33,它将与其相反,并且一切都会很好。