from array import * def gen_n_items(n,item): for i in xrange(n): yield(item) # Some things to fix here! def memoed(fun): maxmemosize = 131 # 072 notfilled = 0L memo = array('L') def wrapper(n): memsiznow = len(memo) if None == n: return(memo) # For debugging elif n >= memsiznow: newsize = min(maxmemosize,max(n+1,2*memsiznow)) memo.extend(gen_n_items(newsize-memsiznow,notfilled)) res = memo[n] if(notfilled == res): res = fun(n) memo[n] = res return(res) else: return(res) return wrapper # Try fibo(47) for example. (The last that fits into long!) @memoed def fibo(n): '''Fibonakin luvut.''' if(n < 2): return(n) else: return(fibo(n-2)+fibo(n-1)) @memoed def A001477(n): '''Produces non-negative integers in funny way.''' if(n < 2): return(n) else: return(A001477(n-1)+(A001477(n-1)-A001477(n-2)))