java - 回文程序,无法终止循环,欧拉计划 #4

标签 java loops recursion

import java.util.ArrayList;
public class Euler4{
    public static void main(String [] args){
                int size = 0;
        int product = 0;

        for(int i = 102; i > 100; i--){
            for(int j = 102; j > 100; j--){
                ArrayList<Integer> digits = new ArrayList<Integer>();
                product = i*j;
                int index = 0;
                while(product > 0){
                    digits.add(index,product%10);
                    product /= 10;
                    index++;
                }
                for(int element : digits)
                    System.out.println("digits :" + element);   
                size = digits.size() - 1;

                if(test(0,size,digits)){
                    System.out.println("i and j " + i + " " + j);
                    break;  
                }
            }
        }
    }

    public static boolean test(int i, int size, ArrayList<Integer> digits){

        if(digits.get(size).equals(digits.get(i))){

            if(size == i || size - i == 1){
                return true;

            }else{
                System.out.println("i: " + i + " size: " + size + " digits@i: " + digits.get(i) +" digits@size " + digits.get(i));
                size--;
                i++;

                if(!test(i, size, digits))  
                    return false;
            }   
        }
        return false;
    }
}

这是输出:

digits :4 index: 0
digits :0 index: 1
digits :4 index: 2
digits :0 index: 3
digits :1 index: 4
digits :2 index: 0
digits :0 index: 1
digits :3 index: 2
digits :0 index: 3
digits :1 index: 4
digits :2 index: 0
digits :0 index: 1
digits :3 index: 2
digits :0 index: 3
digits :1 index: 4
digits :1 index: 0
digits :0 index: 1
digits :2 index: 2
digits :0 index: 3
digits :1 index: 4
i: 0 size: 4 digits@i: 1 digits@size 1
i: 1 size: 3 digits@i: 0 digits@size 0

我觉得while循环有问题,递归有问题。通过 test() 方法运行的值是进入数组的最后一组值,即 10201 因此即使 while 循环搞砸了,递归方法仍应返回 true。我不知道为什么不是。

问题是: http://projecteuler.net/problem=4

谢谢。

编辑:我将其修复以提高效率并提供最大回文数而不是仅列出回文数。如果有人感兴趣,这是 final :http://pastebin.com/qJUpZVzK

最佳答案

您第三次调用 test正在返回 true , 但你第二次调用 test没有使用该值。它落到方法的底部并返回 false , 当你真的想让它返回 true .

当您调用 test 时递归地,你想返回 true (来自 test )如果递归调用返回 true .

改变

if(!test(i, size, digits))  
      return false;

靠近底部,到

return test(i, size, digits);

关于java - 回文程序,无法终止循环,欧拉计划 #4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20940160/

相关文章:

java - 创建包含外部文件的 Runnable Jar

java - @After ,@before 不在测试用例中工作

java - 如何找到导致 JVM 内存不足的类?

jquery - 可以在 CoffeeScript 中循环每个吗?

python - 需要帮助修改洪水填充算法

java - 多个 Hadoop FileSystem 实例

php - 如何使用 php 在更新查询中更新具有多列的特定单列?

list - Ansible - 如何将一个列表分成两个列表?

recursion - 尾递归与迭代算法

c - C 中的堆栈跟踪函数