in reply to Pascal's triangle...
Hey kiat,
I noticed that your algorithm skips the "1 1" row. I made some changes to fix that bug:
I noticed that your algorithm skips the "1 1" row. I made some changes to fix that bug:
I also think that using the Binomial Theorem when printing out an entire Pascal's triangle is inefficient. I would rather add numbers from the previous row, as this is much, much faster for large numbers of rows. So I wrote up some code to do this:sub pascal { my ($rows) = @_; print "1\n"; for (my $outer = 1; $outer < $rows; $outer++) { my $inner = $outer; print "1"; for ($i = 1; $i < $inner; $i++) { my $denominator = factorial($i)*(factorial($inner-$i)); my $pascalnum = factorial($inner)/$denominator if ($denominator +!= 0); print " $pascalnum" if ($outer > 1); } print " 1\n"; } }
I'm using array references instead of arrays for extra speed (when we copy the results of $this_row into $last_row), but the references could be removed without affecting the algorithm.sub ton_pascal { my $rows = shift; my $last_row = [ ]; my $this_row = [ 1 ]; last unless ($rows > 0); print "1\n"; for (my $i = 1; $i < $rows; ++$i) { $last_row = $this_row; $this_row = [ 1 ]; for (my $j = 1; $j < $i; $j++) { push(@$this_row, $last_row->[$j - 1] + $last_row->[$j]); } push(@$this_row, 1); print join(' ', @$this_row) . "\n"; } }
Hope this was helpful... I had fun coding up ton_pascal, so thanks for the problem!
-Ton
-----
Be bloody, bold, and resolute; laugh to scorn
The power of man...
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Pascal triange...
by Abigail-II (Bishop) on Jun 19, 2002 at 11:48 UTC | |
by Abigail-II (Bishop) on Jun 19, 2002 at 17:04 UTC | |
by Burak (Chaplain) on Dec 25, 2003 at 14:35 UTC | |
by kiat (Vicar) on Jun 19, 2002 at 13:40 UTC | |
by Abigail-II (Bishop) on Jun 19, 2002 at 13:59 UTC | |
Re: Re: Pascal triangle...
by kiat (Vicar) on Jun 19, 2002 at 10:52 UTC |
In Section
Seekers of Perl Wisdom