Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用递归将数字减少到一位数 $result=reduce($number); 函数减少($number){ $new_number=0; 如果($number_Php_Recursion_Numbers - Fatal编程技术网

Php 使用递归将数字减少到一位数 $result=reduce($number); 函数减少($number){ $new_number=0; 如果($number

Php 使用递归将数字减少到一位数 $result=reduce($number); 函数减少($number){ $new_number=0; 如果($number,php,recursion,numbers,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 =

这应该适合您:

只需将数字拆分为一个数组,然后使用将所有数字相加即可

$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);
    }
}
编辑:

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

echo array_sum(str_split($number));

这应该适合您:

只需将数字拆分为一个数组,然后使用将所有数字相加即可

$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);
    }
}
编辑:

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

echo array_sum(str_split($number));

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

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
。它应该是这样的:

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 reduce($new_number);

因此,即使100000或000001也将是1,可以按照您的意愿工作,但如果参数为0001000,则会出现问题,因为代码太多,请查看下一个参数

return reduce($new_number);

因此,即使100000或000001也将是1,可以正常工作,但如果参数为0001000,则会有问题。您需要向递归调用添加
return
。它不会按您的方式返回递归调用。“不工作”是什么意思?@kainaw if中有一个返回语句condition@user_0我通过了10,我得到了值1。当我通过100,我什么都没有。@agriz啊,好吧,我把你的问题看错了。^如果你加上这个作为例子,它会更清楚。我想你只是想要校验和。(根据这个更新了我的答案)您需要将
return
添加到递归调用中。它不会按您的方式返回递归调用。您说的“不工作”是什么意思?@kainaw if中有一个返回语句condition@user_0我通过了10,我得到了值1。当我通过100,我什么都没有。@agriz啊,好吧,我把你的问题看错了。^如果你加上这个作为例子,它会更清楚。我想你只是想要校验和。(根据这个更新了我的答案)如果数字之和大于9怎么办?再做一次?你不会演示如何反复做,直到数字之和是一个位数(如问题所要求的)。等等,这个解决方案有效,它不是递归的,但它有效,为什么使用下一票?实际上这是最有效的方法。@kainaw,如果数字总和大于9怎么办?没关系,我的解决方案有效。您没有显示…,可能是因为我的解决方案不使用/需要递归。请使用
$number=99;
尝试您的解决方案结果应该是9。这是你得到的还是你得到的18(不是9)@kainaw你是对的,但我真的无法从OP的例子中分辨出10。我现在用一个函数更新了我的答案,它只需要少一些代码行,如果数字的总和大于9怎么办?再做一次?你不会演示如何反复做,直到总和是一个数字(正如问题所要求的那样)。等等,这个解决方案有效,它不是递归的,但它有效,为什么使用下一票?实际上这是最有效的方法。@kainaw,如果数字总和大于9怎么办?没关系,我的解决方案有效。您没有显示…,可能是因为我的解决方案不使用/需要递归。请使用
$number=99;
尝试您的解决方案结果应该是9。这是你得到的还是你得到的18(不是9)。@kainaw你是对的,但我真的不能从OP的例子中用10来区分。我现在用一个函数更新了我的答案,只需要少几行代码