使用递归将数字减少到一位数

时间:2015-05-29 19:11:15

标签: php recursion numbers

$result = reduce($number);

function reduce($number) {
    $new_number = 0;
    if($number < 10) {
        return $number;
    }           

    $q = floor($number / 10 );
    $r = $number % 10;
    $new_number = $q + $r;

    if($new_number <= 9) {          
        return $new_number;         
    }
    else {
        reduce($new_number);
    }
}

我想用数字加上数字 例如,如果我通过10,它应该返回1 + 0 = 1
如果我通过10实话,这是有效的 但是当我通过100时没有工作。

3 个答案:

答案 0 :(得分:4)

这应该适合你:

只需将您的号码拆分为str_split()的数组,然后使用array_sum()将所有数字加在一起。

echo array_sum(str_split($number));

修改

如果您不想要校验和,但只需要一个数字,那么您也不必编写那么多代码。只需反复调用该函数,直到array_sum()等于或小于9。

function reduceToOneSingleDigit($result) {
    $result = str_split($result);
    while(array_sum($result) > 9) 
        return reduceToOneSingleDigit(array_sum($result));
    return array_sum($result);
}

echo reduceToOneSingleDigit(99);

答案 1 :(得分:2)

代码太多,请看下一个

print sum(125); // 8

// 5  12
// 2  1
// 1 + ~>0
function findSum($num)
{
    if($num == 0)
        return 0;
    return $num%10 + findSum(floor($num/10));   
}

所以,即使100000或000001也是1,按照你想要的方式工作,但如果参数为0001000则会有麻烦

答案 2 :(得分:1)

您在结尾附近缺少单词return。它应该是这样的:

return reduce($new_number);