通过递归添加数字将数字减少到单个数字

How to reduce a number to single digit by adding its individual digits recursively :

Example 1 : $n = 99999 >> 45 >> 9

Example 2 : $n = 444444 >> 24 >> 6

Example 3 : $n = 8888888888888885 >> 125 >> 8;

then get equal to at last we want to get single digit.

You can use array_sum and str_split into a while loop until the final value of $n has the length equal to 1.

$n = 4444;

while (strlen($n) > 1) {
    $n = array_sum(str_split($n));
}

var_dump($n);

Without array_sum and str_split you can use something like:

$n = '4444';

while (strlen($n) > 1) {
    $s = 0;
    for ($i = 0; $i < strlen($n); $i++) {
        $s += $n[$i];
    }
    $n = (string) $s;
}

var_dump($n);

You can calculate this in a much more simple and elegant way, let me try to explain. For example if you have the number 53, you can divide it by 9 and it’s remainder will be it’s reduced number. Don’t ask me how I figured this out, I was just tinkering with numbers. So what you can do is use modulus, (53 % 9 = 8!) (517 % 9 = 4!). Perfect right? Almost, if the number is a multiple of 9 like 45 for example if you “modulus” it by 9 you will receive it’s remaineder which is 0 and we would expect 9 because 45 reduced to a single digit is 9. So you can just make a quick and easy else if statement checking for an output of 0, and if it’s 0 just return 9. Done! Whatever number you out in from 1 to infinty it will reduce it perfectly. Hope this helps :)