За последние 24 часа нас посетили 22878 программистов и 1260 роботов. Сейчас ищут 742 программиста ...

Проблема в задаче с рекурсией, помогите найти ошибку

Тема в разделе "PHP для новичков", создана пользователем Zog, 15 июл 2019.

  1. Zog

    Zog Новичок

    С нами с:
    15 июл 2019
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте, товарищи! Помогите найти ошибку в решении, вот условие задачи:

    Дано число. Сложите его цифры. Если сумма получилась более 9-ти, опять сложите его цифры. И так, пока сумма не станет однозначным числом (9 и менее).

    Вот мое решение:
    PHP:
    1. <?php
    2. $num = 7564134846;   //произвольное число присваиваем переменной $num                                                      
    3.  
    4. function lowNumber($num)     //рекурсивная функция
    5. {
    6.     $arr = str_split($num, 1);     //разбиваем параметр в массив по 1 символу
    7.     $result = array_sum($arr);   //подсчитываем сумму цифр
    8.     if ($result > 9) {             //если больше 9, то уйдет в рекурсию
    9.         lowNumber($result);
    10.     } else {                 //если меньше или равно 9,
    11.         return $result;     //то вернет конечное число-результат
    12.     }
    13. }
    14. var_dump( lowNumber($num) );  //вернет NULL, а должно возвращать число
    Где червоточина, где изъян в моей логике? Почему функция вместо нормального числа возвращает NULL?
    Сразу хочу сказать, что решения другими способами не интересуют. Мне важно понять, что я конкретно здесь сделал не так.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Этот код на русский язык переводится: если result больше 9, вызвать рекурсивно саму себя, а результат выбросить в мусорное ведро.
     
  3. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    return забыл ты в общем =)
    PHP:
    1. return lowNumber($result);
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    @Artur_hopf, ну что ж ты так прямо-то? Надо же мозг человеку развивать
     
  5. Zog

    Zog Новичок

    С нами с:
    15 июл 2019
    Сообщения:
    2
    Симпатии:
    0
    Спасибо, други, я все осознал.
     
  6. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Надеюсь тут число всегда рандомное
     
  7. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    PHP:
    1. function lowNumber($num){
    2.     if($num <= 9) return $num;  // если есть условие при котором функция должна делать "ничего"
    3.                                 // то такое условие должно быть как можно ближе к началу функции
    4.     return lowNumber(array_sum(str_split($num, 1)));
    5. }
    6.  
    7. $num = 7564134467745678488;
    8. echo lowNumber($num);
     
  8. acso

    acso Активный пользователь

    С нами с:
    15 апр 2010
    Сообщения:
    150
    Симпатии:
    25
    Адрес:
    Одесса
    Коль пошла такая пьянка))
    PHP:
    1. function lowNumber($num) {
    2.   return $num <= 9 ? $num : lowNumber(array_sum(str_split($num, 1)));
    3. }