PHP中文俱乐部's Archiver

kinter 发表于 2003-5-10 21:27

发现PHP一个递归的问题~觉得应是BUG

<?
function abc($s="1")
{
        if($s!="11111111")
        {
                abc($s."1");
        }
        else
        {
                // echo $s;  《=只有这样才显示 $s 的值
        return $s;
        }
}
$s=abc();
echo "显示:".$s; // 〈= 这里并不显示$s 的值
?>
/* 按照道理应该显示出的$s结果是
                        -------------------------------------------
                            显示:11111111
                        -------------------------------------------
但实际上字符串根本不显示,就是说,return $s 根本没有用,显示的是
                        -------------------------------------------
                             显示:
                        -------------------------------------------

只有当我们直接在function里 echo $s; 时 ,才可以显示出$s的值,但还是无法返回正确 字符串,大家试试,HOHO。

有谁知道为什么?告诉我
*/

Boban 发表于 2003-5-11 02:30

回复:发现PHP一个递归的问题~觉得应是BUG

你的递归调用的时候没有接收的表达式呀。改成这样如何?

<?
function abc(&$s)
{
        if($s!="11111111")
        {
                $s=$s."1";
                abc($s);
        }
        else
        {
         echo $s; //《=只有这样才显示 $s 的值
        //return $s;
        }
}

$s=1;
abc($s);
echo "显示:".$s; // 〈= 这里并不显示$s 的值
?>

kinter 发表于 2003-5-11 03:04

回复:发现PHP一个递归的问题~觉得应是BUG

晕~以前学C的没要用过~HOHO,就……,我试是试

kinter 发表于 2003-5-11 03:20

回复:发现PHP一个递归的问题~觉得应是BUG

不对啊~刚才仔细看了一下,你这个不是return了,是传值调用了!!!
跟 return 不同啊!

fluke 发表于 2003-5-11 14:02

回复:发现PHP一个递归的问题~觉得应是BUG

我也遇到过类似的问题,就是不太搞得懂return

fluke 发表于 2003-5-11 14:05

回复:发现PHP一个递归的问题~觉得应是BUG

想问一下,为什么要在变量前加"&"
是不是这样啊:
$a=$b
改动$b时,$a也跟着变了
而这样:
$a=&$b
改动$b,$a不变啊?

是不是用"$a=$b"时,两个变量放在同一个内存地址?

dracula 发表于 2003-5-11 17:14

回复:发现PHP一个递归的问题~觉得应是BUG

$a = $b;//这是传值赋值,语句执行后$a与$b两个变量的值相等,但互不影响。
//任何一个改变不会影响到另一个。

$a=&$b;//这是传址赋值,$a指向$b的地址。
//两个变量指向相同的内存空间,其中一个改变,另一个必然改变。

我记得是这样的,可能是你记反了。

danielking 发表于 2003-5-12 15:48

回复:发现PHP一个递归的问题~觉得应是BUG

的确有问题呀,$s=11111111的时候还是在递归的最里面一层,你用return只是把11111111返回给了最里面一层abc,所以最外面的一层abc当然不能取到返回值了
你说对吗?呵呵

kinter 发表于 2003-5-13 00:10

回复:发现PHP一个递归的问题~觉得应是BUG

寒一个~php是基于C的,C的递归做过不少了~没有这个问题

Boban 发表于 2003-5-13 00:56

回复: 回复:发现PHP一个递归的问题~觉得应是BUG

[QUOTE][i]最初由 fluke 发表[/i]
[b]想问一下,为什么要在变量前加"&"
是不是这样啊:
$a=$b
改动$b时,$a也跟着变了
而这样:
$a=&$b
改动$b,$a不变啊?

是不是用"$a=$b"时,两个变量放在同一个内存地址? [/b][/QUOTE]
&是采用传递地址的方式

fluke 发表于 2003-5-14 13:40

回复:发现PHP一个递归的问题~觉得应是BUG

哦,怪不得,原来是我记反了
(以前在书店只看了一分钟,呵呵)

zyx164823178 发表于 2009-2-26 14:01

回复:发现PHP一个递归的问题~觉得应是BUG

<?php
function digui($i){
        if($i>1){
                $sum=$i * digui($i-1);
        }
        else{
                $sum = 1;
        }
        return $sum;

}

echo digui(6);
?>
输出结果:720
这个也许应该可以帮助你们。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.