Мемуизированные рекурсивные функции. Как сделать их дурацкими?

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

Предположим, что в одном из пакетов имеется следующее определение

f[0] = f[1] = 1
f[x_] := f[x] = f[x - 1] + f[x - 2]

. Пользователь может загрузить пакет и сразу же начать запрос f [1000]. Это вызовет сообщение об ошибке $ RecursionLimit:: reclim и прекратит работу. Даже если пользователь затем пытается что-то меньшее, скажем f [20], к настоящему времени определение f повреждено, и результат больше не является хорошим. Конечно, разработчик пакета может увеличить предел рекурсии и предупредить пользователя, но мой вопрос:

Как вы можете улучшить определение f так, что если пользователь просит f [1000] он/она получает ответ без каких-либо проблем? Я заинтересован в способе ловушки пользовательского ввода, его анализа и принятия любых необходимых мер для оценки f [1000].

Я легко могу представить, что можно изменить предел рекурсии, если входное значение больше 255 (и затем вернуть его на исходный уровень), но что я действительно хотел бы видеть, если есть способ для f узнать, сколько значений он «знает» (fknownvalues) и принять любые входные значения < = fknownvalues + $ RecursionLimit без проблем или увеличить $ RecursionLimit, если входные значения выше.

Спасибо за помощь

-121--1024585- CXF - Как объявить атрибут обязательным и непримитивным? У меня есть метод веб-службы, который получает объект. Одним из атрибутов является «интервал», который является целым числом. Я хотел бы сделать этот атрибут обязательным, но без предоставления какого-либо значения по умолчанию - я...

У меня есть метод веб-службы, который получает объект. Одним из атрибутов является «интервал», который является целым числом.

Я хотел бы сделать этот атрибут обязательным, но без предоставления какого-либо значения по умолчанию - я хочу, чтобы пользователь должен был явно установить значение.

Если я использую int interval - атрибут отображается как int, и если пользователь не устанавливает атрибут явным образом, ноль (Java default for primitive int) будет отправлен.

Если я использую Целочисленный интервал - атрибут отображается как Integer и объявляется необязательным в WSDL, так что пользователь не может видеть, что он необходим перед отправкой запроса.

Если я использую целочисленный интервал с @ StartElement (обязательный = true) или @ StartElement (nillable = false) - атрибут отображается как int.

Атрибут может иметь любое целое число -

Я могу использовать интервал BigInteger с @ StartElement (обязательный = true) но, чем мы упускаем преимущества использования типа ядра Integer.

Я хотел бы представить атрибут как Integer, поэтому я получу null, если пользователь не установил атрибут, и в то же время я хотел бы, чтобы WSDL показал, что атрибут требуется, чтобы пользователи знали, что он требуется просто, посмотрев WSDL.

5
задан skaffman 30 October 2011 в 23:25
поделиться