不用循环,不用递归,输出1到100的整数

很久没有上CSDN了,昨晚去逛了一下,看到一个讨论如何不用循环输出1到100的整数的帖子标题上了论坛头版,于是进去掺和。
因为我觉得这个题目很有意思,对程序员的思维是个很好的考验,看看我们是不是只会定向思维了。

我在帖子里回复了好几次,把我想到的主要的几种解决代码贴在这里。

不用循环、不用递归,输出1到100的整数

(1)SQL版:利用了联表和identity函数
 
    select top 100 identity(tinyint,1,1) as ii into #a  from sysobjects a, sysobjects b;
    select * from #a;
    drop table #a;

(2)利用VBScript特有的String函数(生成重复字符组成的串):
<script language="vbscript">
ExecuteGlobal "i=0"&Replace(String(100,"A"),"A",":i=i+1:document.writeln i")
</script>

(3)定时器版: (只是一种思路,该方法运行慢且耗资源)
这一思路的js版
<script language="javascript">
i=0,k=[];j=setInterval('if(i>100){clearInterval(j);alert(k)}else{k[i]=++i}',20);
</script> 
vbs版同理
 
(4)利用数组特性快速生成100个字符的串

这一思路的js版
<script language="javascript">
i=0;eval((new Array(101)).join('document.writeln(++i);'));
</script>

这一思路的vbs版:
<script language="vbscript">
i=0:dim s(100):ExecuteGlobal Join(s,":i=i+1:document.writeln i")
</script>

(5)利用10*10进行替换(replace),快速得到100个字符的串

这一思路的js版
<script language="javascript">
eval("i=1;"+("AAAAAAAAAA".replace(/A/g,"AAAAAAAAAA").replace(/A/g,'document.writeln(i++);')));
</script> 
 
这一思路的vbs版:
<script language="vbscript">
ExecuteGlobal "i=1:" & Replace(Replace("AAAAAAAAAA","A","AAAAAAAAAA"),"A","document.writeln(i):i=i+1:")
</script>

(6)利用HTML的有序列表 <OL>的实现
   在用以上任一方法得到100个字符的字符串后,替换为<LI>: (巧妙的利用了HTML的特性,够投机取巧吧!)

这一思路的js版:
<script language="javascript">
eval('<ol>'+(new Array(101)).join('<li>')+'</ol>');
</script>

这一思路的vbs版:
<script language="vbscript">
dim x(100):document.write "<ol>"& Join(x,"<li>") &"</ol>"
</script>

(7)巧用JS中replace函数的第二个参数
<script language="javascript">
i=0;document.writeln((new Array(101)).join('A ').replace(/A/g,function(){return (++i);}));
</script>

<script language="javascript">
document.writeln((new Array(101)).join('A').replace(/A/g,function(){return (arguments[1]+1)+' ';}));
</script>

总结:
以上几种方法,如果你也能完全想到,那至少需要对SQL语句、js和vbs的API、HTML等非常熟悉。当然,最重要的是跳出惯性思维,灵活运用。

附CSDN原帖链接: http://topic.csdn.net/u/20080707/15/4ddd4781-88f7-4c9d-a2b2-7fb21360e244.html

你可能感兴趣的:(递归)