前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一日一技:如何用递归函数写出2**n - 1?

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

作者头像
青南
发布2020-01-16 15:44:31
4190
发布2020-01-16 15:44:31
举报
文章被收录于专栏:未闻Code

摄影:产品经理

实验室的年会下午茶

已知 n 为正整数,写一个递归函数计算。

在 Python 里面要计算非常简单:

代码语言:javascript
复制
>>> def calc(n):
...  return 2 ** n - 1
...
>>> calc(10)
1023

运行效果如下图所示:

现在,需要写一个递归函数来计算的值。

如果要计算,那么这个递归函数非常简单:

代码语言:javascript
复制
def calc(n):
    if n > 0:
        return 2 * calc(n - 1)
    else:
        return 1

现在的问题是,如何把-1放到这个函数里面去?

可能有同学想到一个比较贱的方法,就是在函数里面再定义一个函数:

代码语言:javascript
复制
def calc(n):
    def power(n):
        if n > 0:
            return 2 * power(n - 1)
        else:
            return 1
    return power(n) - 1

然而,这种方法实际上并不满足题意。虽然power是一个递归函数,但是calc只是普通函数。

那有没有更好的办法来计算呢?

考虑到.同时,所以我们可以把函数改写为:

代码语言:javascript
复制
def calc(n):
    if n == 1:
        return 1
    else:
        return 1 + 2 * calc(n - 1)

运行效果如下图所示:

凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未闻Code 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档