Обновить
21
Sergey Basalaev@Moonrise

Пользователь

3
Подписчики
Отправить сообщение
Ну с объектом всё понятно — во время компиляции же неизвестно, какой конструктор необходимо вызвать
Хм, я на спектрумах в основном встречал WASD либо WAXD. В одной игре была ещё ESDF.
> Любой набор бит можно отобразить в другой набор бит с помощью арифметических и логический операций
Если вы имеете ввиду конечный набор бит, то да. Иначе, возникают вопросы вычислимости. Собственно, если ограничиться 32 битами, то функцию факториала (32 младших бита) можно вообще выписать аналитически без каких бы то ни было рекурсий.

Про реализацию ветвления через таблицу переходов и косвенную адресацию я понял. Собственно, это сродни тому, что я делал вначале (через хеш-таблицы), только выглядит уже не извращением, а практическим подходом.
Тогда, да, я неправильно рассуждал.
> Растущую функцию можно вычислить легко.
В оригинальном комменте предлагалось плясать от единицы. Я имел ввиду, что из неё сколь угодно большое число не построишь за конечное число операций.
Такое решение было предложено выше, см. habrahabr.ru/blogs/crazydev/124878/#comment_4106908
О, спасибо, запомню! Мне не удалось до такого додуматься.
Имеет право на существование, хотя мне кажется, что это не совсем то на самом деле, так как в основном эта программа полагается скорее на механизм исключений. Если позволите, можно отбросить в вашем коде всё лишнее и написать просто
public class App {

    public static void main(String[] args) {
        taste("pie");
        taste("cake");
        taste("cookie");
    }

    private static void taste(String s) {

        try {
            s = Character.toUpperCase(s.charAt(0)) + s.substring(1);
            Class.forName(App.class.getName() + "$" + s);
            System.out.println("Mmm, very tasty!");
        } catch (Exception ex) {
            System.out.println("Not so tasty as I wish :(");
        }
    }

    static class Cake { }
}

Идея с исключениями приходила мне в голову, но я её забраковал, как неуниверсальную. Да и это тоже в своём роде ветвление.
Ну, строго говоря, ленивые операторы — тоже условные конструкции.
В любом случае за конечное число шагов можно получить только конечное число. Для конкретной программы максимальное такое число можно оценить, а поскольку факториал — растущая функция, дело в шляпе. На самом деле без условий даже длинную арифметику реализовать не получится, куда уж тут факториалу.
Хм, а как вы собираетесь решать, входить или НЕ входить в рекурсию? Если программа линейна, то варианта только два: входить всегда или не входить никогда.
Идея то безусловно прозрачна и ясна. А конкретную реализацию не предложите?
Да, вы правы. Если не дать себе поблажку и не ограничить это число итераций сверху. Например, для всех чисел, больших 10 выводить «очень много».
Слишком уж сложно вы завернули :) Всё даже куда проще — для вычисления n! нужно O(n) операций, а в линейной программе число операций фиксировано. Заведомо найдётся число, для вычисления факториала которого потребуется больше, чем есть в программе. Вот если сказать, что n не превышает, скажем, 10, то ещё можно попробовать.
При должной гибкости и некоторой тренировке и не такое возможно. Правда практический смысл от этого такой же, как от этой статьи :)
Пробовал и вполне успешно!

Информация

В рейтинге
Не участвует
Откуда
Новосибирск, Новосибирская обл., Россия
Дата рождения
Зарегистрирован
Активность