Как мне сделать это еще, если утверждение в рекурсивное утверждение? - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь сделать этот код рекурсивным.Предполагается, что мы будем печатать «R», если int x нечетное, и «L», если int x четное.

public String findRL(int x){
    s="";
    while (x > 1){
        if (x%2 ==0){
            s = "L" + s;
        }
        else{
           s = "R" + s;
           x = x/2;
        }
    }
}

1 Ответ

0 голосов
/ 18 октября 2018

Я пытаюсь сделать этот код рекурсивным

Первым шагом должна быть попытка заставить код работать.Объявлено, что оно возвращает String, но никогда не возвращает s.Кроме того, он легко входит в бесконечный цикл, когда x становится четным.Итак, давайте заменим ее на эту похожую функцию:

public String findRL(int x) {
    String s = "";

    while (x > 1) {
        if (x % 2 == 0) {
            s += "L";
        } else {
            s += "R";
        }
        x /= 2;
    }

    return s;
}

Это может быть не эквивалентно тому, что вы пытались сделать, но должно быть достаточно, чтобы увидеть, как мы можем преобразовать ваш реальный код в рекурсивную функцию:

public String findRL(int x) {
    String s = "";

    if (x > 1) {
        if (x % 2 == 0) {
            s = "L";
        } else {
            s = "R";
        }

        s += findRL(x / 2);
    }

    return s;
}

Мы не изменяем оператор if ... else на рекурсию, а вместо while цикла, так как рекурсия обычно использует неявный цикл вместо явный цикл в interation .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...