小明帯了一笔钱出去旅游,出门的第一天花了ー半,加10元,往后的每天都花之前一天剩下的半,加10元, 第八天的早上时候小明只剩下了10元钱,写段代码,计算小明出去的时候带了多少钱?
一般递归:
每一级递归,都会调用函数本身,会创建新的栈,随着递归深度的增加,创建的栈会越来越多,最终会造成爆栈。
def money(day): if day == 8: return 10 else: money_new = (money(day + 1) + 10) * 2 return money_new
尾递归:
基于函数的尾调用,每一级调用直接返回函数的返回值更新调用栈,而不是创建新的调用栈,类似迭代的实现,
时间和空间上均优化了一般递归。
def money_02(day, total=10): if day == 8: return total else: money_new = money_02(day + 1, (total + 10) * 2) return money_new