Перевести код Java в код PHP (13 строк) - PullRequest
0 голосов
/ 31 августа 2009

Симонн помог мне здесь кодировать упорядоченную целочисленную функцию разбиения. Он опубликовал две функции: одна функция просто возвращает количество разделов, вторая функция дает разделы в виде списка.

Мне уже удалось перевести первую функцию с Java на PHP:

К сожалению, мне не удается перевести вторую функцию. Кто-нибудь может мне помочь и перевести эту маленькую функцию для меня?

public class Partitions2
{
    private static void showPartitions(int sizeSet, int numPartitions)
    {
        showPartitions("", 0, sizeSet, numPartitions);
    }

    private static void showPartitions(String prefix, int start, int finish,
                int numLeft)
    {
        if (numLeft == 0 && start == finish) {
                System.out.println(prefix);
        } else {
                prefix += "|";
                for (int i = start + 1; i <= finish; i++) {
                        prefix += i + ",";
                        showPartitions(prefix, i, finish, numLeft - 1);
                }
        }
    }

    public static void main(String[] args)
    {
        showPartitions(5, 3);
    }
}

Было бы замечательно, если бы решением была одна функция вместо класса с несколькими функциями.

Заранее большое спасибо! И еще раз спасибо Саймонну за этот великолепный ответ!

1 Ответ

1 голос
/ 31 августа 2009

Вероятно, вам не нужен метод main, который, похоже, представляет собой тестовую установку, показывающую, как вызывать другой метод.

Проблема отображения этого кода непосредственно в PHP заключается в том, что вы не можете перегрузить имена методов в PHP. Вместо этого вы должны сосредоточиться на переводе второй версии функции showPartitions. Если вам нужна версия с двумя аргументами, вы можете использовать значения по умолчанию для префикса и параметров запуска (для этого вам нужно изменить порядок параметров, потому что в PHP необязательные параметры должны стоять последними). ​​

Вот моя (не проверенная) попытка перевести наиболее важную функцию:

function showPartitions($prefix, $start, $finish, $numLeft)
{
    if ($numLeft == 0 && $start == $finish) {
        echo $prefix."\n";
    } else {
        $prefix .= "|";
        for ($i = $start + 1; $i <= $finish; $i++) {
            $prefix .= $i.",";
            showPartitions($prefix, $i, $finish, $numLeft - 1);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...