Just for kicks I memo-ized this with a local variable. It dramatically reduces the level of recursion and speeds up the calculation for large towers. For example, calculating a twenty-disk tower goes from over 2,000,000 calls to tower() to 109, and the time is less than 1/3. I'm actually surprised it's not faster. I'm curious if I'm missing something obvious.
gc *local* R *on* mouseUp *ask* "How many disks are there?" *delete* variable R *put* tower (it , "A", "B" , "C") into field 2 *end* mouseUp * * *function* tower N, *start*, destination, spare *if* R[N,*start*,destination,spare] is empty *then* *if* N = 1 *then* *put* "Move " & N & " from "& *start* & " to "& destination & cr into R[N,*start*,destination,spare] *else* *put* tower(N - 1, *start*, spare, destination) & "Move " & N & " from "& *start* & " to "& destination & cr & tower(N - 1, spare, destination, *start*) into R[N,*start *,destination,spare] *end* *if* *return* R[N,*start*,destination,spare] *end* tower _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode