Improve this recursive code please!
waxmop
waxmop at sarcastic-horse.com
Tue May 6 16:53:30 EDT 2003
I caught the problem:
> findarrangements(binsleft - 1, bricksleft - n, bins)
should be:
findarrangements(bricksleft-n, binsleft-1, bins)
And now it works:
>>> from revtupp import findarrangements as f
>>> bins=[]
>>> f(3,3,bins)
(0, 0, 3)
(0, 1, 2)
(0, 2, 1)
(0, 3, 0)
(1, 0, 2)
(1, 1, 1)
(1, 2, 0)
(2, 0, 1)
(2, 1, 0)
(3, 0, 0)
Thanks for the help.
waxmop wrote:
> Steven Taschuk wrote:
>
> <snip>
>
> > So, instead of assigning bricks one by one, let's try assigning to
> > the bins one by one. Something like this:
> >
> > def findarrangements(bricksleft, binsleft, bins):
> > if binsleft > 1:
> > # More than one bin left, and we need to distribute
> > # bricksleft bricks among them.
> > for n in range(bricksleft+1):
> > # Find arrangements in which next bin has n bricks.
> > bins.append(n)
> > findarrangements(binsleft - 1, bricksleft - n, bins)
> > bins.pop()
> > else:
> > # Only one bin left; put all remaining bricks there.
> > bins.append(bricksleft)
> > print tuple(binsbuilt)
> >
> >
>
> I think that "binsbuilt" should just be bins, right? Here's the code that I
> tried:
>
> def findarrangements(bricksleft, binsleft, bins):
> if binsleft > 1:
> for n in range(bricksleft+1):
> bins.append(n)
> findarrangements(binsleft-1, bricksleft-n, bins)
> bins.pop
> else:
> bins.append(bricksleft)
> print tuple(bins)
> bins.pop()
>
> ----- and here's the results I got:
>
> >>> from revtupp import findarrangements
> >>> bin=[]
> >>> findarrangements(2,2,bin)
> (0, 0, 1)
> (0, 0, 1, 1)
> (0, 0, 1, 1, 1)
> (0, 0, 1, 1, 2, 1)
>
> I'm still working on it; maybe I typed something in wrong.
More information about the Python-list
mailing list