|
Subject: RE: [xsl] Fibonacci & XSL From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx> Date: Tue, 17 Dec 2002 14:00:50 -0000 |
You can do it in Saxon 7.x as:
<xsl:function name="m:fibonacci" saxon:memo-function="yes">
<xsl:param name="n" as="xs:integer">
<xsl:result as="xs:integer"
select="if ($n=0) then 0
else if ($n=1) then 1
else m:fibonacci($n-1) + m:fibonacci($n-2)"/>
</xsl:function>
In XSLT 1.0 you can do by calling a recursive template starting with the
value 0,
calling itself with the value $param+1 until the required parameter
value is reached, each time supplying the values of the last two items
in the sequence as parameters.
Michael Kay
Software AG
home: Michael.H.Kay@xxxxxxxxxxxx
work: Michael.Kay@xxxxxxxxxxxxxx
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of
> Kasper Nielsen
> Sent: 17 December 2002 11:19
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Fibonacci & XSL
>
>
> This is actually more a question of dynamic programming in
> XSL. If you can't remember the function it is:
>
> F0 = 0
> F1 = 1
> f(n)=f(n-1)+f(n-2) for n>=2
>
> is it possible to make a template that calculates this in
> linear time (I know it can be done in O(lg n) but linear is
> enogh) in xsl? The straightforward recursive method for
> calculating f(n) is clearly exponential in n.
>
> If it is possible I would prefer an example using memoization
> because I need it to a similar problem I have.
>
> regards
> Kasper
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] Fibonacci & XSL, bryan | Thread | RE: [xsl] Fibonacci & XSL, bryan |
| RE: [xsl] Fibonacci & XSL, bryan | Date | RE: [xsl] Extending Xhtml2fo.xsl to, Graham Hannington |
| Month |