Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以Java递归方式返回两个数字之间的差值_Java_Recursion - Fatal编程技术网

以Java递归方式返回两个数字之间的差值

以Java递归方式返回两个数字之间的差值,java,recursion,Java,Recursion,我有点安静我不知道怎么做 编写一个递归函数,获取2个正数并返回这些数字之间的差 例如n1=24646468和n2=248,它返回5 public static int diff(int n1, int n2){ int sum1=0; int sum2=0; if(n1==0 && n2==0){ return sum1-sum2; } if(n1>n2)

我有点安静我不知道怎么做

编写一个递归函数,获取2个正数并返回这些数字之间的差

例如n1=24646468和n2=248,它返回5

        public static int diff(int n1, int n2){
        int sum1=0;
        int sum2=0;
        if(n1==0 && n2==0){
            return sum1-sum2;
        }
        if(n1>n2){
            if(n2==0){
                sum1++;
                return diff(n1/10, n2);
            }
            sum2++;
            return diff(n1,n2/10);
        }
        if(n1<n2){
            if(n1==0){
                sum2++;
                return diff(n1, n2/10);
            }
            sum1++;
            return diff(n1/10,n2);
        }
        return 0;
    }
publicstaticintdiff(intn1,intn2){
int sum1=0;
int-sum2=0;
如果(n1==0&&n2==0){
返回sum1-sum2;
}
如果(n1>n2){
如果(n2==0){
sum1++;
回流差(n1/10,n2);
}
sum2++;
回流差(n1,n2/10);
}

if(n1唯一的
return
不是对
diff
的递归调用,它返回
sum1-sum2
,并且在最后一行将这两个变量分配给
0
return 0


您希望在递归时跟踪状态。

问题是您使用了int和int操作,这将丢失浮点精度

使用上面相同的代码,在计算之前将int转换为float。 尝试:

公共静态内部差异(内部na、内部nb、内部sumn1、内部sumn2){
n1=na;
浮点数n2=nb;
int sum1=sumn1;
int sum2=sumn2;
如果(na==0&&nb==0){
返回sum1-sum2;
}
如果(n1>n2){
如果(n2==0){
sum1++;
返回差((内部)(n1/10f),(内部)n2,sum1,sum2);
}
sum2++;
返回差((内部)n1,(内部)(n2/10f)、sum1、sum2);
}

如果(n1感谢评论我的人,我想我找到了解决方案:

        public static int diff(int n1, int n2, int sum1, int sum2){
        if((n1==0 && n2==0)&& sum1>sum2){
            return sum1-sum2;
        }
        if((n1==0 && n2==0)&& sum1<sum2){
            return sum2-sum1;
        }
        if(n1>n2){
            if(n2==0){
                sum1++;
                return diff(n1/10, n2, sum1, sum2);
            }
            sum2++;
            return diff(n1,n2/10, sum1, sum2);
        }
        if(n1<n2){
            if(n1==0){
                sum2++;
                return diff(n1, n2/10, sum1, sum2);
            }
            sum1++;
            return diff(n1/10,n2, sum1, sum2);
        }
        return 0;
    }
public static int diff(int n1、int n2、int sum1、int sum2){
如果((n1==0&&n2==0)&&sum1>sum2){
返回sum1-sum2;
}
如果((n1==0&&n2==0)和&sum1n2){
如果(n2==0){
sum1++;
回流差(n1/10、n2、sum1、sum2);
}
sum2++;
回流差(n1、n2/10、sum1、sum2);
}

如果(N1)您尝试过使用调试器吗?从两个更简单的数字开始,如
1
999
。如何跟踪状态?更新了调试器:)
        public static int diff(int n1, int n2, int sum1, int sum2){
        if((n1==0 && n2==0)&& sum1>sum2){
            return sum1-sum2;
        }
        if((n1==0 && n2==0)&& sum1<sum2){
            return sum2-sum1;
        }
        if(n1>n2){
            if(n2==0){
                sum1++;
                return diff(n1/10, n2, sum1, sum2);
            }
            sum2++;
            return diff(n1,n2/10, sum1, sum2);
        }
        if(n1<n2){
            if(n1==0){
                sum2++;
                return diff(n1, n2/10, sum1, sum2);
            }
            sum1++;
            return diff(n1/10,n2, sum1, sum2);
        }
        return 0;
    }