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

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

摄影:产品经理实验室的年会下午茶

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

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

>>> def calc(n):
... return2 ** n - 1
...
>>> calc(10)
1023

运行效果如下图所示:

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

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

def calc(n):
    if n > 0:
        return2 * calc(n - 1)
    else:
        return1

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

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

def calc(n):
    def power(n):
        if n > 0:
            return2 * power(n - 1)
        else:
            return1
    return power(n) - 1

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

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

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

def calc(n):
    if n == 1:
        return1
    else:
        return1 + 2 * calc(n - 1)

运行效果如下图所示:

目录
相关文章
|
8月前
|
C语言
c语言编程练习题:7-41 计算阶乘和
c语言编程练习题:7-41 计算阶乘和
153 0
|
缓存 算法 搜索推荐
递归函数就这么简单!通俗的Go语言递归指南
递归函数就这么简单!通俗的Go语言递归指南
124 0
|
8月前
|
Python
Python实现递归的方式来生成斐波那契数列
Python实现递归的方式来生成斐波那契数列
|
5月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
119 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
|
7月前
|
C语言
C语言学习记录——用递归思想求第n个斐波那契数,函数递归
C语言学习记录——用递归思想求第n个斐波那契数,函数递归
43 0
|
8月前
|
算法 API Python
递归函数:原理与实践
递归函数:原理与实践
|
8月前
|
算法 搜索推荐 程序员
第四十四练 请以递归方式实现计算阶乘的函数
第四十四练 请以递归方式实现计算阶乘的函数
57 1
|
8月前
|
算法 搜索推荐 程序员
C语言第三十一练——递归求解n位斐波那契数列
C语言第三十一练——递归求解n位斐波那契数列
54 0
|
8月前
|
机器学习/深度学习
20004.C语言编程基础(0001)- 递归法求阶乘
20004.C语言编程基础(0001)- 递归法求阶乘
79 0
|
算法
递归函数(详解+实战)
递归函数(详解+实战)