【问题标题】:PHP: Simple recursive function into iterative functionPHP:简单的递归函数到迭代函数
【发布时间】:2011-05-05 12:33:11
【问题描述】:

我本来打算用 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,我无法理解正确的逻辑。你知道我做错了吗?

【问题讨论】:

  • 请举例说明?
  • 我找不到重点。这是作业吗? PHP中不需要整数和字符串之间的转换。
  • @xPheRe,这是一个朋友问的面试问题,他没有参加面试,他只是阅读了这个问题,我正在帮助他了解如何去做。

标签: php function recursion types


【解决方案1】:

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

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

如果你需要用迭代来做:

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

更新:我的错,数字以相反的顺序插入。现在它应该工作了。抱歉,也未经测试。

【讨论】:

  • 我想在 C 中做它,它不使用标准函数(所以 sprintf 出来了),你的第二个例子吐出“02”而不是“20”,很奇怪。我真的只是在帮助某人在 C 中做到这一点,我将停止思考并去睡觉。 :)
  • 我更新了我的答案,你是对的,它以相反的顺序构建了字符串。现在它应该可以正常工作了。我希望。
  • 啊!经过一番睡眠,我现在明白了这一点,它完美地工作并适用于我想帮助某人的问题。现在用 C 语言做起来应该很简单(加上简单的 ASCII 码)。谢谢
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 2016-03-01
    • 2019-06-20
    • 2021-03-17
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 2021-12-09
    相关资源
    最近更新 更多