一日一技:如何用递归函数写出2**n - 1?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一日一技:如何用递归函数写出2**n - 1?相关的知识,希望对你有一定的参考价值。
一日一技:如何用递归函数写出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)
运行效果如下图所示:
以上是关于一日一技:如何用递归函数写出2**n - 1?的主要内容,如果未能解决你的问题,请参考以下文章