update recursive