标签:mic 正整数 问题 简单 return 运行 下午茶 现在 递归
一日一技:如何用递归函数写出2**n - 1?摄影:产品经理
实验室的年会下午茶
已知 n 为正整数,写一个递归函数计算。
在 Python 里面要计算非常简单:
>>> def calc(n):
... return 2 ** n - 1
...
>>> calc(10)
1023
运行效果如下图所示:
现在,需要写一个递归函数来计算的值。
如果要计算,那么这个递归函数非常简单:
def calc(n):
if n > 0:
return 2 * calc(n - 1)
else:
return 1
现在的问题是,如何把-1放到这个函数里面去?
可能有同学想到一个比较贱的方法,就是在函数里面再定义一个函数:
def calc(n):
def power(n):
if n > 0:
return 2 * power(n - 1)
else:
return 1
return power(n) - 1
然而,这种方法实际上并不满足题意。虽然power是一个递归函数,但是calc只是普通函数。
那有没有更好的办法来计算呢?
考虑到.同时,所以我们可以把函数改写为:
def calc(n):
if n == 1:
return 1
else:
return 1 + 2 * calc(n - 1)
运行效果如下图所示:
标签:mic 正整数 问题 简单 return 运行 下午茶 现在 递归
原文地址:https://blog.51cto.com/15023263/2558846