专栏首页未闻Code一日一技:如何用递归函数写出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)

运行效果如下图所示:

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

本文分享自微信公众号 - 未闻Code(itskingname),作者:kingname

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一日一技:先判断再返回True或False型函数的缩减

    青南
  • 一日一技:pandas读取多个工作簿

    在使用pandas读Excel文件的时候,可能会遇到有多个工作簿的情况。如果我们直接像下面这样写代码:

    青南
  • 一日一技:在Python中,调用对象不存在的方法时自定义提示信息

    现在,我实例化这个类,并调用它的 play方法,由于这个方法不存在,所以现在必定导致报错,如下图所示。

    青南
  • 企业如何实现上云、选云和买云的三步走

    云计算的发展进入稳定期后,客户的关注点已经聚焦到了混合云,从混合云的视角出发来看,公有云厂家的产品已经琳琅满目非常成熟了,从传统的虚拟服务器、存储、网络,到数据...

    静一
  • Google:基于容器的服务发现与负载均衡

    曾在Google广告部门任职,负责广告的架构任务,14年回国同年9月创立数人云,主要基于Docker容器技术为企业级客户打造私有的PaaS平台,帮助企业客户解决...

    技术zhai
  • 中缀表达式值

    中缀表达式值(Expr.cpp) 【问题描述】        输入一个中缀表达式(由0-9组成的运算数、加+减—乘*除/四种运算符、左右小括号组成。注意“—”...

    attack
  • 函数_TypeScript笔记5

    带类型的函数声明足够表达一个函数的类型信息,但无法复用。那么有办法复用一个函数的类型吗?

    ayqy贾杰
  • 用户金额的终极解决方案--Redis Lua 顶

    我们在开发各种订单系统的时候都会碰到一个必须面对的问题,用户金额的最终结算。一般我们会把金额存在数据库中,采用行级锁的方式来对金额的变动来进行处理,但是在高并发...

    算法之名
  • phalapi-进阶篇7(使用缓存以及用redis拓展解决实际问题)

    #phalapi-进阶篇7(使用缓存以及用redis拓展解决实际问题) ? ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样...

    喵了个咪233
  • 技术 | Python从零开始系列连载(二十八)

    之前我水平有限,对于淘宝评论这种动态网页,由于数据在网页源码中是找不到的,所以无法抓取数据,只能使用selenium模仿人操控浏览器来抓数据,

    灯塔大数据

扫码关注云+社区

领取腾讯云代金券