码迷,mamicode.com
首页 > 其他好文 > 详细

一日一技:如何用递归函数写出2**n - 1?

时间:2020-12-08 12:06:28      阅读:3      评论:0      收藏:0      [点我收藏+]

标签: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)

运行效果如下图所示:

技术图片
技术图片

一日一技:如何用递归函数写出2**n - 1?

标签:mic   正整数   问题   简单   return   运行   下午茶   现在   递归   

原文地址:https://blog.51cto.com/15023263/2558846

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!