semirecursive