$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.
Вам не хватает слова return
ближе к концу. Он должен выглядеть так:
return reduce($new_number);
Это должно сработать для вас:
Просто разделите свой номер на массив с помощью 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);
Просто слишком много кода, взгляните на следующий
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, работает так же, как и U, но у него будут проблемы, если paramater будет 0001000
return
к рекурсивному вызову. Он не возвращает рекурсивный вызов, как у вас есть.