recursive & loop