положить формулу в цикл - PullRequest
       46

положить формулу в цикл

0 голосов
/ 05 ноября 2019

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

Функция для помещения в цикл

Я использовал операторы if, чтобы дать мне конкретныйрезультат, если входное значение равно нулю, но если входное значение равно единице или больше, цикл for должен выполняться.

Мне задали вопрос о рекурсии, и я должен был выполнить его 3 разными способами, один из них с использованием цикла, которыйЯ уже сделал и запускаю, но дает неожиданные результаты.

public class Assignment5Recursion {
public static int puzzleLoop(int n) {
    int v=0;
    if(n>=1) {
        for(int i=1; i<=n+1; i++) {
            v = (2*i-1);
        }
        return ((2*n+1)+2*v);
    }
    else {
        return 1;
    }}}

если n равно 1, результат должен быть 5, если n равно 2, результат должен быть 13, если n равно 3, результатдолжно быть 25, если n равно 7, результат должен быть 113, но по какой-то причине я получаю разные выходные данные, поэтому я предполагаю, что я установил неправильную петлю.

Ответы [ 3 ]

1 голос
/ 05 ноября 2019

Вам нужно внести 2 изменения.

1) Цикл будет выполняться с i=1 до i=n+1, тогда как вам нужно только, чтобы он работал до i=n.

Так чтоусловие выхода из цикла должно быть либо i<n+1, либо i<=n

2) Переменная v будет заменяться при каждом запуске цикла, так как ей каждый раз назначается новое значение.

Таким образом, значение v всегда будет v=2*(n+1)-1 в соответствии с вашим кодом.

Вам нужно сделать это v += (2*i-1), чтобы новое значение v добавлялось к старому значению, чтобы получить сигма (сумма).

Замена цикла for, как показано ниже, решит вашу проблему.

for(int i=1; i<n+1; i++) {
        v += (2*i-1);
}

или

for(int i=1; i<=n; i++) {
        v = v+(2*i-1);
}
1 голос
/ 05 ноября 2019

Вы допустили две ошибки, вместо добавления к v вы обновляете каждую итерацию, поэтому итоговые значения не суммируются. А поскольку вы используете <=, вам не нужно повторять до n+1. Итак, вот вам пересмотренный метод puzzleLoop

public static int puzzleLoop(int n) {
    int v = 0;

    if (n >= 1) {
        for (int i = 1; i <= n; i++) {
            v += (2 * i - 1);
        }

        return ((2 * n + 1) + 2 * v);
    }

    return 1;
}

Вам также не нужен оператор else part, поскольку, если он не находится в блоке if, вы всегда можете безопасно вернуть 1.

0 голосов
/ 05 ноября 2019

Σ (2 * i-1), сумма должна переноситься по циклу

изменить оператор в цикле на v = v + (2 * i-1) и условие на i <= n </p>

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