I answered Alessandro's question.  You can verify my reasoning by using
6!:2 or 7!:2.

I believe Alessandro may have been confused by the related Fibonacci's
sequence, where a straightforward (double) recursion *would* cause S(0) and
others to be evaluated multiple times in the evaluation of S(n).  But even
for that sequence there are numerous more efficient alternatives.  See
http://www.jsoftware.com/jwiki/Essays/Fibonacci%20Sequence .


On Sat, Dec 22, 2012 at 9:23 AM, Skip Cave <s...@caveconsulting.com> wrote:

> So, what is the answer to Alessandro's question, namely, whether any of the
> array-based solutions avoid redundant computations? We know the looping
> approach avoids redundancy, but what about the others?
>
> I'm not enough of a J expert to answer that question, as it requires a more
> intimate
> knowledge of the internals and optimizations of the J primitives than I
> have.
> One of the interesting effects of array languages is that the interpreter
> can detect
> and optimize array operations "under the covers", without the programmer
> having
> to worry about those optimizations. The J sort operator /: is a good
> example of this
> type of phenomena.
>
> Skip
>
> On Sat, Dec 22, 2012 at 9:52 AM, Boyko Bantchev <boyk...@gmail.com> wrote:
>
> > On 21 December 2012 01:02, Skip Cave <s...@caveconsulting.com> wrote:
> > > The best way to answer his question is to program the problem using his
> > > explicit looping approach, and compare that approach with the
> approaches
> > > proposed by the various members of the forum.
> >
> > Comparing solutions with respect to, say, speed, may only tell us
> > which one to use (once we have them all!) if we want that speed.
> > But such a comparison does not answer Alessandro's question, namely,
> > whether array-based solutions, or a particular one of them, avoid
> > the redundant computations that he wrote of.
> >
> > Furthermore, comparing solutions with explicit loops to solutions
> > without them always tends to be unfair to the former. Huge differences
> > in speed do arise not only because J performs excelently on whole-
> > array operations, but also because it is very slow when it has to
> > execute code repeatedly.  In this it is much, much slower than most
> > other languages.
> >
> > This is easily demonstrated by writing in another language a program
> > similar to the above discussed acx, such as the following program in
> > Ruby:
> >
> > n = 5000
> > a,b = 1,0
> > r = [[a,b]]
> > (n-1).times do
> >   a,b = 5*a,5*b+3
> >   r << [a,b]
> > end
> >
> > Regarding performance, Ruby is well known for the lack of it.  Still,
> > this program is faster by orders of magnitude than acx.  It is also
> > faster than hr1 and hr2, although not much faster – only about twice
> > on my computer for n=5000.  (The speed ratio increases with the growth
> > of n.)
> >
> > One more observation.  How can one *predict* that the closed-formula
> > based solution of Bo and Linda will lose so dramatically to Henry's
> > solutions?
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
>
> --
> Skip Cave
> Cave Consulting LLC
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to