不同程序员如何编写阶乘函数
不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同的程序员编出的代码显示出了不同的风格,代码都很简单,有趣,以下是Mathematica代码
(*编程新手*)
fact1:=Which,True,Return]];
Print]
(*Pascal程序员*)
fact2:=Module[{res =1,i =2},While;Return];
Print]
(*C程序员*)
fact3:=Module[{res =1, i},For;Return];
Print]
(*看过SICP的程序员*)
fact4:=If];(*此处用了尾递归和默认参数*)
Tablei],{i,10}]
(*有一定Mathematica经验的程序员*)
fact5:=Module[{res =1},Do; res];
(*Mathematica中不推荐用For或者While的,执行效率较低*)
Tablei],{i,10}]
(*懒惰的程序员*)
fact6:=If];
fact6 /@Range
(*更懒的*) fact7 =If[#<1,1,#*#0[#-1]]&;
fact7 /@Range
(*数学系的*)
fact8=1; fact8:= x*fact8;
fact8 /@Range
(*Mathematica专家*)
fact9 =FoldList[#1*#2&,1,Range]&;(*类似Python里面的reduce*)
fact9
(*黑客*)
fact10 =Times@@Range[#]&;
fact10~Map~Range@10
(*专家级别*) fact11:=Gamma
(*伽玛函数是作为阶乘的延拓,阶乘是其特例*)
10// fact11
(*大英帝国程序员*)
fact12:=Product;
(*Product是连乘函数,阶乘当然是连乘*)
fact12@10
(*喜欢恶搞的程序员*)
fact13:=Length@Permutations@Range@x;(*x个元素的全排列长度为x!,很低效且占内存*)
fact13@10
(*喜欢用模式匹配的人*)
fact14:={1, x}//.{a_,b_/; b >0}:>{b a, b -1}//First;
fact14
(*最懒的*)
fact15 =#!&;(*!是专门计算阶乘的内置函数Factorial的简写*)
fact15@Range@10
1# G-Spider
Fold可以这样用:Fold]FoldList]qq = Fold] &
qq 动态规划:f = i = 1; Table = f*i, {10}] 我是典型的c语言的
Nest[#*i++ &, i = 1, 10]
f //. {f -> 1, f -> n f}
t = i = 1; Table // Last
# & @@ Nest[{#*#2, #2 + 1} & @@ # &, {1, 1}, 10]
perl新手,我也来两个。
code 1(递归):sub factorial {
return !(\$_/2) || \$_*factorial(\$_-1);
}
print factorial 10;code 2(支持控制台输入n):\$n=\$n*\$_||1 for (0..<>);
print \$n; 刚才对最后一跟帖重新排版编辑,不知何故,之前的所有跟帖全部消失!!!:'( 对不住大家了
//=====================================================
刚才再刷新了下,居然又有了,惊喜!;P
页:
[1]