fibon(n,a,b):={ local k,uk; for (k:=2;k<=n;k++) { uk:=a+b; a:=b; b:=uk; } return uk; }On écrit pour avoir u0, u1...un:
fibona(n,a,b):={ local k,uk,res; res:=a,b; for (k:=2;k<=n;k++) { uk:=a+b; a:=b; b:=uk res:=res,uk; } return res; }On écrit pour avoir ud, u1...un pour d
fibonac(c,n,a,b):={ local k,uk,res; for (k:=2;k<c;k++) { uk:=a+b; a:=b; b:=uk }; if c>1 res:=NULL else if c==0 {res:=a,b;c:=2;} else if c==1 {res:=b;c:=2}; for (k:=c;k<=n;k++) { uk:=a+b; a:=b; b:=uk res:=res,uk; } return res; }On suppose maintenant que la suite est définie par une relation de récurrence definie par une fonction de m variables f : pour définir la suite on se donne les m premiers termes :
urec(f,n,l0):={ local s,k,uk; s:=size(l0); l0:=op(l0); for (k:=s;k<=n;k++) { uk:=f(l0); l0:=tail(l0),uk; } return uk; }On utilise op au début, pour transformer la liste l0 en une séquence et tail(l0) pour enlever le premier élément et ainsi l0:=tail(l0),uk est une séquence qui a toujours s éléments.
On peut aussi considérer que le paramètre l contient toutes les variables à savoir l = f, n, u0,.., um-1 . On écrit mais c'est inutilement compliqué (!) :
urecs(l):={ local f,n,s,k,uk; f:=l[0]; n:=l[1]; l:=tail(tail(l)); s:=size(l); //f est une fonction de s variables for (k:=s;k<=n;k++) { uk:=f(l); l:=tail(l),uk; } return uk; }
Pour avoir tous les termes uk de la suite pour k allant de 0 à n,
On considère que le paramètre l contient toutes les
variables à savoir
l = f, n, u0,.., um-1.
On écrit :
urec_termes(l):={ local f,n,s,k,uk,lres; f:=l[0]; n:=l[2]; l:=tail(tail(tail(l))); s:=size(l); //f est une fonction de s variables lres:=l; for (k:=s;k<=n;k++) { uk:=f(l); lres:=lres,uk; l:=tail(l),uk; } return lres; }Par exemple on définit :
^
k),k=0..5)
Pour avoir tous les termes uk de la suite pour k allant de k0 à n,
On considère que le paramètre l contient toutes les
variables à savoir
l = f, k0, n, u0,.., um-1.
On écrit :
urec_termekn(l):={ local f,n,s,k,uk,k0,lres; f:=l[0]; k0:=l[1]; n:=l[2]; l:=tail(tail(tail(l))); s:=size(l); //f est une fonction de s variables for (k:=s;k<k0;k++) { uk:=f(l); l:=tail(l),uk; }; if k0>1 res:=NULL else if k0==0 {res:=a,b;k0:=2;} else if k0==1 {res:=b;k0:=2}; for (k:=k0;k<=n;k++) { uk:=f(l); lres:=lres,uk; l:=tail(l),uk; } return lres; }Par exemple on définit :