Вы не можете удалить оператор return
.
Действительно, play()
возвращает string
.Таким образом, если условие true
, вы возвращаете string
o
.Но если вы войдете в блок else, вы также должны вернуть string
, потому что play(i+1)
вернет строку, если ее условие выполнится, но ничего иначе (кроме выполнения другого вызова).И вы не хотите ничего получать, вы хотите вернуть полученный результат string
.
Другими словами, когда дочерняя функция возвращает string
, , текущая функция должна пройтиэто его родителю и так далее .Если условие дочерней функции выполнено успешно и вы пропустили оператор return, вы никогда не передадите этот результат родителю и, наконец, ничего не вернете вверху (неожиданное поведение или ошибка, честно говоря, я не пробовал).
И, кстати, код, который вы запускаете, очень опасен.Если int
, переданный в параметре, больше, чем 3
, рекурсия будет выполняться бесконечно, добавляя play()
вызовов до тех пор, пока не закончится память.
Я надеюсь, что она отвечает на ваш вопрос:)