一个PHP递归程序请教大家下。。 本帖最后由 linlichao2007 于 2012-03-29 21:47:38 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <?phpfunction foo($str){ $len=strlen($str); for($i=0;$i<$len;$i++){ if($i==0){ for($j=0;$j<$len-1;$j++){ $arr[$i][]=substr_replace($str,$str{$j}.'.',$j,1); } }else{ for($j=0;$j<$len-1;$j++){ foreach($arr[$i-1] as $v){ if(strpos(substr($v,$j,2),'.')===false) $arr[$i][]=substr_replace($v,$v{$j}.'.',$j,1); $arr[$i]=array_unique($arr[$i]); } } } } return $arr;}print_r(@foo('abcdef'));我这代码惨不忍睹,坐等高人 其实循环一次就足够啊,非要递归吗,LZ从不结贴吗print_r(add_dot("abcd"));/***把第一个元素弹出即可满足要求Array( [0] => abcd [1] => abc.d [2] => ab.cd [3] => ab.c.d [4] => a.bcd [5] => a.bc.d [6] => a.b.cd [7] => a.b.c.d)/***/function add_dot($str, $tmp=""){ $n = strlen($str); if($n<=1){ $res[] = $tmp.$str; if($tmp) $res[] = $tmp.".".$str; } else{ $res = add_dot(substr($str,1), $tmp.$str{0}); if($tmp) $res = array_merge($res, add_dot(substr($str,1), $tmp.".".$str{0})); } return $res;} sdffsfsdfdss.fsdfsdfs.f.s.d.f.s.d.f...确认你们的答案都ok?还是楼主的题目就没写对? LZ的问题问的。。举例,结果都不一样,我猜是这样吧。$str = 'abcdefg';function addPoint( $str ,$prefix, $c = array()){ if(strlen( $str ) == 1) return $c; for($i=1,$j=strlen($str);$i<$j;$i++) { $c[] = $prefix.substr($str,0,$i).'.'.substr($str,$i); } return addPoint(substr($str,1),$prefix.substr($str,0,1).'.',$c);}echo "<pre/>";print_r( addPoint($str,'',array())); php不报错 关于动态添加上传 并写入数据库 是否可以不使用js,实现点击超链接提交表单? JS 能不能 不通过<form>和AJAX 用POST方式 提交变量呢“?? 就像get 可以不通过 fo jquery 将一个页面固定在另一个页面的底部??? [讨论]关于程序写法优化的思想 PHP执行顺序讨论! 怎样用ado方式连接到oracle数据库 请教smarty空白页问题 用php 把html 生成图片,请大神指点一下 php的数组怎么打乱顺序 new SimpleXMLElement在服务器上用不了,是什么原因?
function foo($str){
$len=strlen($str);
for($i=0;$i<$len;$i++){
if($i==0){
for($j=0;$j<$len-1;$j++){
$arr[$i][]=substr_replace($str,$str{$j}.'.',$j,1);
}
}else{
for($j=0;$j<$len-1;$j++){
foreach($arr[$i-1] as $v){
if(strpos(substr($v,$j,2),'.')===false)
$arr[$i][]=substr_replace($v,$v{$j}.'.',$j,1);
$arr[$i]=array_unique($arr[$i]);
}
}
}
}
return $arr;
}
print_r(@foo('abcdef'));我这代码惨不忍睹,坐等高人
print_r(add_dot("abcd"));
/***
把第一个元素弹出即可满足要求
Array
(
[0] => abcd
[1] => abc.d
[2] => ab.cd
[3] => ab.c.d
[4] => a.bcd
[5] => a.bc.d
[6] => a.b.cd
[7] => a.b.c.d
)
/***/
function add_dot($str, $tmp=""){
$n = strlen($str);
if($n<=1){
$res[] = $tmp.$str;
if($tmp) $res[] = $tmp.".".$str;
}
else{
$res = add_dot(substr($str,1), $tmp.$str{0});
if($tmp) $res = array_merge($res, add_dot(substr($str,1), $tmp.".".$str{0}));
}
return $res;
}
s.fsdfsdf
s.f.s.d.f.s.d.f
...确认你们的答案都ok?还是楼主的题目就没写对?
$str = 'abcdefg';
function addPoint( $str ,$prefix, $c = array())
{
if(strlen( $str ) == 1) return $c;
for($i=1,$j=strlen($str);$i<$j;$i++)
{
$c[] = $prefix.substr($str,0,$i).'.'.substr($str,$i);
}
return addPoint(substr($str,1),$prefix.substr($str,0,1).'.',$c);
}
echo "<pre/>";
print_r( addPoint($str,'',array()));