Word.exe перестал работать с помощью рекурсии - PullRequest
0 голосов
/ 13 мая 2019

когда убираю return в секцию else перестал работать код throw word.exe Я попытался отладить, и когда базовое условие истинно, а 'i' начинает уменьшаться, когда 'i' равно 1, выдает ошибку

string o = "555";
string play(int i){
    if(i == 3) return o;
    else
        return play(i+1);
}

1 Ответ

2 голосов
/ 13 мая 2019

Вы не можете удалить оператор return.

Действительно, play() возвращает string.Таким образом, если условие true, вы возвращаете string o.Но если вы войдете в блок else, вы также должны вернуть string, потому что play(i+1) вернет строку, если ее условие выполнится, но ничего иначе (кроме выполнения другого вызова).И вы не хотите ничего получать, вы хотите вернуть полученный результат string.

Другими словами, когда дочерняя функция возвращает string, , текущая функция должна пройтиэто его родителю и так далее .Если условие дочерней функции выполнено успешно и вы пропустили оператор return, вы никогда не передадите этот результат родителю и, наконец, ничего не вернете вверху (неожиданное поведение или ошибка, честно говоря, я не пробовал).


И, кстати, код, который вы запускаете, очень опасен.Если int, переданный в параметре, больше, чем 3, рекурсия будет выполняться бесконечно, добавляя play() вызовов до тех пор, пока не закончится память.

Я надеюсь, что она отвечает на ваш вопрос:)

...