尝试了下尾递归优化，感觉很不错~