##Python 2, 45 bytes <!-- language-all: lang-python --> f=lambda l:l==[]or l[len(l)/2-1]/l.pop()*f(l) Outputs 0 for Falsy, nonzero for Truthy. Checks that the last element is less than or equal to its parent at index `len(l)/2-1`. Then, recurses to check that the same is True with the last element of the list removed, and so on until the list is empty. ---- **48 bytes:** f=lambda l,i=1:l==l[:i]or l[~-i/2]/l[i]*f(l,i+1) Checks that at each index `i`, the element is at most its parent at index `(i-1)/2`. The floor-division produces 0 if this is not the case. Doing the base case as `i/len(l)or` gives the same length. I had tried zipping at first, but got longer code (57 bytes). lambda l:all(map(lambda a,b,c:b<=a>=c,l,l[1::2],l[2::2]))