PHP:简单的递归函数到迭代函数中

时间:2010-11-05 09:41:11

标签: php function recursion types

我打算在C中这样做但是很困惑,所以我转向PHP并且能够复制一个递归函数来执行此操作。我正在将整数转换为带数学的字符串。这是:

function intToString($myDecimal){
    if($myDecimal < 10) {
        return $myDecimal;
    }
    return intToString(($myDecimal / 10)) . ($myDecimal % 10);
}

我之前能够转换一个递归因子函数..但是这个我不知道......我的尝试如下:

function intToStringIter($myDecimal){
    $out = "";
    while($myDecimal > 10) {
        $myDecimal /= 10;
        $out .= $myDecimal;
    }
    $out .= $myDecimal % 10;
    return $out;
}

我觉得我现在太累了,看不到正确的逻辑......它返回22而不是20,我无法绕过正确的东西。你看到我做错了吗?

2 个答案:

答案 0 :(得分:1)

如果您正在寻找大型无符号整数的字符串转换,那么代码实际上是:

function intToString($myDecimal)
{
    return sprintf('%u', $myDecimal);
}

如果你需要迭代:

function intToString($myDecimal)
{
    $result = '';
    while ($myDecimal > 9) {
        $result = ($myDecimal % 10) . $result;
        $myDecimal /= 10;
    }
    return $myDecimal . $result;
}

更新:我的坏,数字以相反的顺序插入。现在它应该工作。对不起,也没有经过考验。

答案 1 :(得分:0)

PHP对变量不是很严格。如果情况喜欢,整数将变为浮点数。在您的代码中,$myDecimal /= 10可以生成$myDecimal的浮点数。以下强制$ myDecimal保持整数。注意:您应该只传递整数,如果您传递9.99,则输出仍为9.99,因为9.99 < 10

function intToStringIter($myDecimal){
    $out = "";
    while($myDecimal >= 10) {
        $myDecimal = (int) ($myDecimal / 10);
        $out .= $myDecimal;
    }
    $out .= $myDecimal % 10;
    return $out;
}