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

Reduce number to single digit using recurssion

$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,它应该 return 1+0 = 1
如果我通过 10
这有效 但是当我通过 100 时不工作。

这应该适合你:

只需将您的号码拆分成一个数组 str_split() and then use 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);

您在结尾附近漏掉了 return 这个词。它应该是这样的:

return reduce($new_number);

代码太多,看下一篇

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 就会有麻烦