有没有一种方法可以打印从1到100的数字,而不使用任何循环或像"if“这样的条件?我们可以很容易地使用递归,但这同样有一个if条件。有没有办法也不用"if“呢?此外,没有重复的print语句,或者包含从1到100的所有数字的单个print语句。
用Java编写的解决方案更可取。
发布于 2010-01-12 02:51:01
伪代码。使用数组在100个元素之后强制执行异常,该异常被捕获且不执行任何操作。
function r(array a, int index){
a[index] = a[index-1]+1
print a[index]
r(a, index+1)
}
try{
array a;
a.resize(101)
r(a, 1)
}catch(OutOfBoundsException){
}编辑
Java代码:
public void printTo100(){
int[] array = new int[101];
try{
printToArrayLimit(array, 1);
}catch(ArrayIndexOutOfBoundsException e){
}
}
public void printToArrayLimit(int[] array, int index){
array[index] = array[index-1]+1;
System.out.println(array[index]);
printToArrayLimit(array, index+1);
}发布于 2010-01-12 03:14:54
了解你的库。
public class To100 {
public static void main(String[] args) {
String set = new java.util.BitSet() {{ set(1, 100+1); }}.toString();
System.out.append(set, 1, set.length()-1);
}
}(您可以使用String.replaceAll更改分隔符。例如,用于空格分隔的.replaceAll(", ", " ")。)
解释:
java.util.BitSet是一个方便的小类,它表示一个任意大的(非稀疏的)正整数集。(它确实有很多不好的地方:不是最终版本,不必要的线程安全,不支持很好的构建,等等)ta。BitSet,允许我只写一次java.util。JDK7的“菱形运算符”应该有助于减少泛型类型的重复,但对于更常见的情况无济于事。:( BitSet.set”这个词有两种完全不同的含义--我喜欢它)。这是一个半开放的范围-顶部的值不包括;底部的包含。将1加到顶部以包含100。BitSet.toString实际上是由接口定义的,docs.append是在PrintStream 5.0中引入Appendable接口时添加到J2SE中的。它本质上是执行子字符串并打印结果。(一个小秘密:规范实际上并不保证这会刷新输出,但实现总是会这样做。)BitSet.发布于 2010-01-12 03:10:52
在任何安全的情况下都不要这样做!
public class Fail {
public void thisFails(int x){
System.out.println(x);
Integer[] bigArray = new Integer[9450];
thisFails(x+1);
}
public static void main(String[] args) {
Fail failure = new Fail();
failure.thisFails(1);
}
}当使用1m的堆空间运行时(java -Xmx1m失败),它将在第100次递归时用完堆。
..。
我现在要去洗手了。
https://stackoverflow.com/questions/2044033
复制相似问题