because it will call this function recursively