我想帮助你纠正这种方法的输出。递归版本返回我需要的内容,但non_recursive版本不会返回相同的结果。这是我的代码:
public static double sum_nr(int n){
int result = 1;
for(int i=n-1; i>0; i--){
result += 1/i;
}
return result;
}
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("Is the string a palindrome or not? ");
String test = scan.nextLine();
System.out.println("Answer: " + isPalindrome_r(test));
System.out.println("Answer: " + isPalindrome_nr(test));
System.out.println("What is the sum of n number: ");
int test2 = scan.nextInt();
System.out.println("Answer: " + sum_r(test2));
System.out.println("Answer: " + sum_nr(test2));
}
n = 10
为1.6179775280898876
非递归版n = 10
为2.0
我希望这两者都匹配。你能救我吗?
答案 0 :(得分:2)
请勿int
使用result
。声明它是double
。另外,使用分数的双字面值进行除法。这两个问题共同造成了不良行为。特别是,1/i
是整数除法,并且对于所有i
>评估为0。 1.如果您使用1.0/i
,则不会发生这种情况,因为i
会在分割前升级为double
。
public static double sum_nr(int n){
double result = 1; // <-- first change
for(int i=n-1; i>0; i--){
result += 1.0/i; // <-- second change
}
return result;
}
答案 1 :(得分:0)
1/i
为1,对于任何i&gt;为0 1,因为您正在使用int
。因此,你的结果是2。
使用double
或float
代替进行计算。
答案 2 :(得分:0)
以下两个版本返回相同的结果:
public static void main(String[] args) throws IOException {
System.out.println(sum_nr(10)); //3.928968253968254
System.out.println(sum_r(10)); //3.928968253968254
}
public static double sum_nr(int n){
double result = 1;
for(int i = n; i > 0; i--){
result += 1.0/i;
}
return result;
}
public static double sum_r(int n){
if (n == 0) {
return 1;
}
else {
return 1.0/n + sum_r(n-1);
}
}