如何简化这段东西

2013-12-13 01:02:47 +08:00
 kennedy32
尝试了一下阶乘表如下:
<?php

function jiecheng($i){
if($i==1){
return $i;
}else{
return $i*jiecheng($i-1);
}
}
function jiecheng2($i){
if($i==1){
return $i;
}else{
$j=jiecheng2($i-1);
return "$i*$j";
}
}

for($i=1;$i<=10;$i++){
echo jiecheng2($i)."=".jiecheng($i)."<br/>";
}

?>

觉得两个功能可以合并,但是总是出错,得不到目前的结果如下:
1=1
2*1=2
3*2*1=6
4*3*2*1=24
5*4*3*2*1=120
6*5*4*3*2*1=720
7*6*5*4*3*2*1=5040
8*7*6*5*4*3*2*1=40320
9*8*7*6*5*4*3*2*1=362880
10*9*8*7*6*5*4*3*2*1=3628800

求前辈指导合并,或者简化。
4739 次点击
所在节点    PHP
55 条回复
manhere
2013-12-13 01:08:42 +08:00
php递归?
kennedy32
2013-12-13 01:09:34 +08:00
@manhere 目前是两个递归,想变成一个递归,把第二个合并到第一个或者用for替代
kavinyao
2013-12-13 01:29:20 +08:00
为什么不用循环?
kennedy32
2013-12-13 01:36:51 +08:00
@kavinyao 想过,无从下手,求范例
cyr1l
2013-12-13 01:48:44 +08:00
我去, 看这 PHP 好像 JavaScript.....
cyr1l
2013-12-13 02:22:01 +08:00
<?php

function sulution($num){
for($a=1;$a<=$num;$a++){
$b=$c=$a;
for($d=$a;$d>0;$d--){
if($d>=2){
$b=$b*($d-1);
$c=$c."*".($d-1);
}else{
echo $c."=".$b."<br/>";
}
}
}
}
sulution(10);

?>
尝试写了一下, 好像ok. 我PHP学的不好, 完全当成JS写的.
txlty
2013-12-13 02:22:38 +08:00
<?php
for($i=1;$i<=10;$i++){
for($j=$i;$j>=1;$j--){
$arr[$i][]=$j;
}
}
for($i=1;$i<=10;$i++){
echo implode($arr[$i],'*').'='.array_product($arr[$i])."\r\n";
}
?>
cyr1l
2013-12-13 02:23:21 +08:00
MD,单词还拼错了. 丢人了又...
txlty
2013-12-13 02:24:39 +08:00
换成<br>
<?php
for($i=1;$i<=10;$i++){for($j=$i;$j>=1;$j--){$arr[$i][]=$j;}}
for($i=1;$i<=10;$i++){echo implode($arr[$i],'*').'='.array_product($arr[$i]).'<br>';}
?>
cyr1l
2013-12-13 02:25:27 +08:00
我去LSS好NB.不明觉厉.
cyr1l
2013-12-13 02:26:56 +08:00
错了, LSSSS... 你老跟我抢楼...
txlty
2013-12-13 03:01:50 +08:00
<?php
$arr=array();
for($i=1;$i<=10;$i++){array_unshift($arr,$i);echo implode($arr,'*').'='.array_product($arr)."<br>";}
?>
总算缩成一个循环了。小站长水平,见笑。
cyr1l
2013-12-13 03:10:59 +08:00
我去, 楼上你来劲了.
来个Ruby版的.

def xx(i)
(1..i).map{|n| p (1..n).to_a.join("*")+"="+(1..n).inject(:*).to_s}
end

xx(10)

应该还能更短的. 我就这水平了.
ccidcce32167
2013-12-13 10:55:11 +08:00
<?php
function jiecheng($i){
for($a=1;$i!=1;$i--)$a*=$i;
return $a;
}
?>
<?php
echo jiecheng(10);
?>

这个可否满足您?
ccidcce32167
2013-12-13 10:56:20 +08:00
可以写成一行的

<?php function jiecheng($i){for($a=1;$i!=1;$i--){$a*=$i;}return $a;} ?>
y1
2013-12-13 11:41:35 +08:00
@Livid, 支持一下代码缩进吧…… 贴 gist 的人还是不够多……
mantianyu
2013-12-13 13:44:42 +08:00
@ccidcce32167 人家要前面那串 "10*9*8*7*6*5*4*3*2*1=" 也输出出来...
10iii
2013-12-13 13:50:57 +08:00
我是来测试gist的。
https://gist.github.com/10iii/7940276
10iii
2013-12-13 13:52:12 +08:00
ccidcce32167
2013-12-13 14:19:15 +08:00
@mantianyu
= =#好吧 两行
<?php function jiecheng($i){for($a=1;$i>=1;$i--){echo $i.($i!=1?"*":"");$a*=$i;}echo "=".$a."<br />";} ?>
<?php for($t=1;$t<=10;$t++){jiecheng($t);} ?>

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/92952

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX