- 注册时间
- 2010-10-22
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 2292
- 在线时间
- 小时
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?欢迎注册
×
不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同的程序员编出的代码显示出了不同的风格,代码都很简单,有趣,
以下是Mathematica代码
(*编程新手*)
fact1[x_Integer]:=Which[x <1,Return[1],True,Return[x*fact1[x -1]]];
Print[fact1[10]]
(*Pascal程序员*)
fact2[x_]:=Module[{res =1,i =2},While[i<=x, res *= i; i = i +1];Return[res]];
Print[fact2[10]]
(*C程序员*)
fact3[x_]:=Module[{res =1, i},For[i=2, i <= x, i++, res *= i;];Return[res]];
Print[fact3[10]]
(*看过SICP的程序员*)
fact4[n_,t_:1]:=If[n ==0, t, fact4[n -1, t*n]];(*此处用了尾递归和默认参数*)
Table[fact4[i],{i,10}]
(*有一定Mathematica经验的程序员*)
fact5[x_]:=Module[{res =1},Do[res *= i,{i, x}]; res];
(*Mathematica中不推荐用For或者While的,执行效率较低*)
Table[fact5[i],{i,10}]
(*懒惰的程序员*)
fact6[x_]:=If[x <1,1, x*fact6[x -1]];
fact6 /@Range[10]
(*更懒的*) fact7 =If[#<1,1,#*#0[#-1]]&;
fact7 /@Range[10]
(*数学系的*)
fact8[1]=1; fact8[x_]:= x*fact8[x -1];
fact8 /@Range[10]
(*Mathematica专家*)
fact9 =FoldList[#1*#2&,1,Range[2,#]]&;(*类似Python里面的reduce*)
fact9[10]
(*黑客*)
fact10 =Times@@Range[#]&;
fact10~Map~Range@10
(*专家级别*) fact11[x_]:=Gamma[x +1]
(*伽玛函数是作为阶乘的延拓,阶乘是其特例*)
10// fact11
(*大英帝国程序员*)
fact12[x_]:=Product[i,{i,1, x}];
(*Product是连乘函数,阶乘当然是连乘*)
fact12@10
(*喜欢恶搞的程序员*)
fact13[x_]:=Length@Permutations@Range@x;(*x个元素的全排列长度为x!,很低效且占内存*)
fact13@10
(*喜欢用模式匹配的人*)
fact14[x_]:={1, x}//.{a_,b_/; b >0}:>{b a, b -1}//First;
fact14[10]
(*最懒的*)
fact15 =#!&;(*!是专门计算阶乘的内置函数Factorial的简写*)
fact15@Range@10
|
|