Pr. Euler 18, recursion problem

Aidan aweraw at gmail.com
Mon Oct 6 03:31:39 EDT 2008


process wrote:
> On Oct 6, 8:13 am, Aidan <awe... at gmail.com> wrote:
>> process wrote:
>>> I am trying to solve project euler problem 18 with brute force(I will
>>> move on to a better solution after I have done that for problem 67).
>>> http://projecteuler.net/index.php?section=problems&id=18
>>> However I can't get the recursive function right.
>>> I always have to use return right? Unless I am printing? So I canät
>>> stack to diffferent recursive calls after each other like so:
>>> recur_left(t, p)
>>> recur_right(t,p+1)
>>> Some stuff I have tried:
>>> def recur(tree, pos):
>>>     if not tree:
>>>         return []
>>>     else:
>>>         return [[tree[0][pos]] + recur(tree[1:], pos)] + \
>>>                [[tree[0][pos]] + recur(tree[1:], pos+1)]
>>>>>> recur([[1],[2,3],[4,5,6]],0)
>>> [[1, [2, [4], [4]], [2, [5], [5]]], [1, [3, [5], [5]], [3, [6], [6]]]]
>>> SO it is kind of working, just not exactly like I want.
>>> A more easily parseable/readable result would be nice, I want to be
>>> able to sum() over each path preferrably.
>>> So the result should be:
>>> [[1,2,4],[1,2,5],[1,3,5],[1,3,6]]
>>> I know conceptually what has to be done.
>>> Base case: empty tree, return []
>>> Else: recur to the left and to the right.
>> This is just my opinion, but I felt the non-brute force solution to this
>> problem was actually simpler than trying to define a brute force
>> recursive solution.... I tried to implement a brute force algorithm at
>> first, until I had an epiphany with regard to how simple the problem
>> actually was.  Then I faced palmed.
> 
> 
> 
> But let's say you have [[1],[1,10],[1,2,300],[100000,1,1,1]].
> 
> you must check all solutions right? there is no pattern. if you start
> from the bottom and eliminate paths that seem to be losing can you
> regain that later up in the pyramid if it turns out one side gets bigg
> again?

It's difficult to say much here without giving the answer away... but, 
yes, you need to check all solutions - it's just that there's a very 
easy way to do that without having to recurse from the top of the tree 
to the bottom.

Hope that gives you a clue while not fully revealing the answer.



More information about the Python-list mailing list