package org.test;import java.io.IOException;public class nFactorial {
long f = 0;
long ff(int n) {
if(n<0) System.out.printf("n<0,input error");
else if(n==0||n==1) f=1;
else f=ff(n-1)*n;
return f;
}
public static void main(String[] args) {
nFactorial nf = new nFactorial();
try {
System.out.println(nf.ff(System.in.read()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}这是一个计算阶乘的递归算法,经过调试发现,当输入为2的时候n=50;当输入为4的时候n=52。这是为什么呢?
System.in.read()这个方法没怎么用过,是这个问题吗?
你可以用-1和中国来测试。
所以2 getBytes()是50……
package org.test;import java.io.IOException;public class nFactorial {
long f = 0;
long ff(int n) {
if(n<0) System.out.printf("n<0,input error");
else if(n==0||n==1) f=1;
else f=ff(n-1)*n;
return f;
}
public static void main(String[] args) {
nFactorial nf = new nFactorial();
java.util.Scanner s = new java.util.Scanner(System.in);
try {
System.out.println(nf.ff(s.nextInt()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}