update recursion