java中的Fermats方程

java中的Fermats方程,java,math,recursion,Java,Math,Recursion,我试图用费马的最后一个方程做一个递归分析程序,但它不断地返回方程是错误的,我不明白 public class fermatdata { public static void data(int a, int b, int c, int n) { if ((Math.pow(a, n)) + (Math.pow(b, n)) == (Math.pow(c, n))) { System.out.println("Holy

我试图用费马的最后一个方程做一个递归分析程序,但它不断地返回方程是错误的,我不明白

public class fermatdata 
{
    public static void data(int a, int b, int c, int n)
    {
        if ((Math.pow(a, n)) + (Math.pow(b, n)) == (Math.pow(c, n)))
        {   
            System.out.println("Holy smokes, Fermat was wrong!");
            return;             
        }
        else
        {               
            data(a-1, b-1, c-1, n-1);
            if (n < 2)
            {                   
                return;                 
            }
            else
            {                   
                data(a-1, b-1, c-1, n-1);                   
            }               
        }
        System.out.println("No, that doesn't work. Fermat was right");          
    }       
    public static void main(String[] args)
    {
        System.out.println("Fermat's last theorem stated that the formula a^n + b^n = c^n while n>2 and all of the numbers are integers will never be correct. Here I am going to do an analysis with all the numbers starting at 100,000 and count backwords to 3");
        data(100000, 100000, 100000, 100000);   
    }   
}
公共类费马数据
{
公共静态无效数据(int a、int b、int c、int n)
{
如果((数学功率(a,n))+(数学功率(b,n))==(数学功率(c,n)))
{   
System.out.println(“天哪,费尔马错了!”);
返回;
}
其他的
{               
数据(a-1、b-1、c-1、n-1);
if(n<2)
{                   
返回;
}
其他的
{                   
数据(a-1、b-1、c-1、n-1);
}               
}
System.out.println(“不,那不行,费尔马是对的”);
}       
公共静态void main(字符串[]args)
{
System.out.println(“Fermat的最后一个定理指出,当n>2时,公式a^n+b^n=c^n,并且所有数字都是整数,这是永远不会正确的。在这里,我将对从100000开始的所有数字进行分析,并将回溯词计数为3”);
数据(100000、100000、100000、100000);
}   
}

尝试删除第一行,如下所示:

        data(a-1, b-1, c-1, n-1);

好,现在看看Math.pow(100001000000)给出了什么(无穷大)。我认为问题在于您使用的值太高(至少对于n而言)。

尝试删除第一行,如下所示:

        data(a-1, b-1, c-1, n-1);

好,现在看看Math.pow(100001000000)给出了什么(无穷大)。我认为问题在于您使用的值太高(至少对于n而言)。

问题在于您使用的幂导致“无穷大”,因为数字太大

由于‘Infinity==Infinity’,程序声明

 ((Math.pow(a, n)) + (Math.pow(b, n)) == (Math.pow(c, n)))

是正确的

问题是,由于数字太大,您使用的幂导致“无穷大”

由于‘Infinity==Infinity’,程序声明

 ((Math.pow(a, n)) + (Math.pow(b, n)) == (Math.pow(c, n)))

是否正确

您首先重复出现,然后检查
n<2
。基本上,这是死代码。请注意双重比较
如果((Math.pow(a,n))+(Math.pow(b,n))==(Math.pow(c,n))
你不应该将
float/double
=
进行比较?如果n小于2,它就停止运行代码,我从100000开始,那么它不应该首先运行所有99997个数字吗?所以我应该将这些指数转换为整数?请考虑一下。这是纯逻辑。您首先重复,然后检查
n<2
。基本上,这是死代码。请注意双重比较
如果((Math.pow(a,n))+(Math.pow(b,n))==(Math.pow(c,n))
你不应该将
float/double
=
进行比较?如果n小于2,它就停止运行代码,我从100000开始,那么它不应该首先运行所有99997个数字吗?所以我应该将这些指数转换为整数?请考虑一下。这是纯粹的逻辑。没有变化,它仍然说它以前做过什么哈哈,所以他有无穷+无穷==无穷。是的,现在它是有意义的。没有变化,它仍然说它以前做过什么哈哈,所以他有无穷+无穷==无穷。是的,现在有道理了。