以Java递归方式返回两个数字之间的差值
我有点安静我不知道怎么做 编写一个递归函数,获取2个正数并返回这些数字之间的差 例如n1=24646468和n2=248,它返回5以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)
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;
}