http://stackoverflow.com/questions/4611549/recursion-with-func
http://stackoverflow.com/questions/1208703/can-an-anonymous-method-in-c-sharp-call-itself