Рекурсивные фибоначчи-подобные функции в Sympy - PullRequest
1 голос
/ 03 ноября 2019

Как я могу определить рекурсивную функцию в Sympy, например, функцию Фибоначчи, чтобы ее движок мог выполнять ее упрощения? Т.е. f(0)=0, f(1)=1, f(x)=f(x-1) + f(x-2)

Похоже, что может потребоваться Piecewise от Sympy, но я не понимаю, как выразить рекурсию.

Я получил это далеко:

from sympy import *

x=symbols('x')
f=Function('f')
f=Piecewise((0, Eq(x,0)), (1, Eq(x,1)), (f(x-1)+f(x-2), True))
f
f.subs(x,10)

Оценка строки f выглядит хорошо: imagef ">

Но последняя строка оценивается как f(8)+f(9), что, конечно, не то, что я хочу, потому что ее нельзя упростить в дальнейшем.

Я знаю, что функция Фибоначчи уже определена, но она мне нужна для чего-то подобного, а не для самой Фибоначчи.

1 Ответ

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

Вы можете попробовать rsolve (хотя в тестируемой мной версии не распознается функция Фибоначчи), но в случае неудачи вы можете рассмотреть запомненную функцию:

>>> from sympy.strategies.core import memoize
>>> @memoize
... def f(x):
...     if x == 0:return 0
...     if x == 1:return 1
...     return f(x-1)+f(x-2)
>>> f(10)
55
>>> f(8)+f(9)
55
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...