Member 13817762 Ответов: 3

Рекурсия в java , кто-нибудь может мне помочь?


Дана последовательность, определенная в соответствии с (1), которая рекурсивно описывается следующим образом:
pi =1( Для 0 ≤ i ≤ 2)
pi = a * p(i-2) + b * p(i-3) для i> 2
Варьируя значения a и b, можно вычислить множество других последовательностей. Писать сейчас
Java-программа, которая вычисляет все следующие элементы pi с i ≤ n и n ∈ N ∪ {0}. Сразу после запуска программы
Ваша программа примет три аргумента командной строки. Число n является первым аргументом командной строки
передавать. Параметр a передается в качестве второго аргумента командной строки. В качестве третьих
Аргумент командной строки передается программе. Он утверждает, что a, b ∈ Z.
Обратите внимание, что все аргументы командной строки должны присутствовать. Происходит при обработке
Аргументы командной строки ошибка или входные данные не соответствуют указанному здесь формату, поэтому
Выводится содержательное сообщение об ошибке, начинающееся с Error, и программа завершается.
Вычисляемые элементы последовательности pi вплоть до индексного числа n разделяются в строке ровно одной запятой
вывод осуществляется с помощью функции System.out.println (). Примитивная рекурсивная реализация
(1) определенное правило расчета будет пересчитывать одни и те же элементы последователя снова и снова. Посредством
При использовании так называемой таблицы поиска этого следует избегать. Это означает, что когда-то ранее неизвестный
Pi добавляется, значение pi добавляется в таблицу поиска. Поэтому
Эта процедура предназначена для предотвращения дорогостоящих вычислений и оптимизации времени выполнения. Выбирать
подходящая структура данных для реализации таблицы поиска

Что я уже пробовал:

public class Main {

    public static void main(String[] args) {
        System.out.println(pi(4));

    }

    public static String pi(int n) {
         
        String result = "";
        int a = 1;
        int b = 1;
        for (int i = 0; i <= n; i++) {
            
            if (i >= 0 && i <= 2) {
                result = 1 + "";

            } else {
                result = a*pi(i - 2) + b*pi(i - 3) + "";
            }
            if (i < n - 1) {
                result += ",";

            }

        }
        return result;
    }
}

3 Ответов

Рейтинг:
20

OriginalGriff

Мы не делаем домашнее задание: оно задано не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!
Перечитайте вопрос еще раз и сравните его с тем, что вы создали до сих пор... это еще даже не близко, не так ли?

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!


Рейтинг:
20

Patrice T

Внимательно ознакомьтесь с требованиями:

Цитата:
Ваша программа примет три аргумента командной строки. Число n является первым аргументом командной строки
передавать. Параметр a передается в качестве второго аргумента командной строки. В качестве третьих
Аргумент командной строки передается программе. Он утверждает, что a, b ∈ Z.

Ваша программа-нет.
Цитата:
Обратите внимание, что все аргументы командной строки должны присутствовать. Происходит при обработке
Аргументы командной строки ошибка или входные данные не соответствуют указанному здесь формату, поэтому
Выводится содержательное сообщение об ошибке, начинающееся с Error, и программа завершается.

Ваша программа-нет.
Ваш расчет pi() счастливо смешивает другие требования, делая его совершенно неправильным.
Совет:
Сделайте кусок кода, который вычисляет pi(x) и ничего больше. Затем вы используете его для всего, что хотите.
Создание программы, которая печатает значение от 1 до N, по существу то же самое, что и программа, которая печатает значения от pi(1) до pi(N).
держите вещи простыми, убедитесь, что программа работает, а затем улучшайте.

Мы не делаем вашу домашнюю работу.
Домашние задания-это упрощенные версии тех задач, которые вам придется решать в реальной жизни. цель это обучение и практикующий.


Рейтинг:
0

Member 13817762

public class Main {

    public static void main(String[] args) {
        Terminal.printLine("Please enter n , a and b ");
        int n = Integer.parseInt(args[0]);
        int a = Integer.parseInt(args[1]);
        int b = Integer.parseInt(args[2]);
        for (int i = 1; i <= n; i++)
            Terminal.printLine(i + "," + recursiv(n));

    }

    public static long recursiv(int n) {

        if (n >= 0 && n <= 2)
            return 1;

        else
            return a*recursiv(n - 2) + b*recursiv(n - 3);

    }

}