Python小细节之代码极致简化到一行(4)(技法慎用)

发布时间:2024年01月02日

一行递归:阶乘晓得伐?

引言

一年过去了
新的一年又开始了
很好奇,大家去年的愿望实现了没有?
而我,比较佛系了
在这里插入图片描述

我反正是没有,因为我去年的愿望是不用打工,自由职业
不曾想,负债自由了,打工更加不可反抗
苦!
在这里插入图片描述

一句话,大家共勉吧!
“不是每一次努力都会有收获,但是,每一次收获都必须努力,这是一个不公平的不可逆转的命题。” —— 廖一梅
在这里插入图片描述

简洁从不缺席!
在这里插入图片描述

开整

递归

递归(Recursion)是一种在数学和计算机科学中广泛使用的概念,特别是在函数定义、算法设计和数据结构中。递归的基本思想是将一个复杂问题分解为一个或多个相同或相似的子问题来解决。

在计算机编程领域中,递归通常表现为函数或过程调用自身以解决规模逐渐减小的问题,并通过基本情况(base case)终止递归。基本情况是指无需进一步递归就能直接得出答案的情形。

例如,在计算阶乘的递归函数中:

  1. 基本情况:factorial(0) = 1factorial(1) = 1 (任意一个都可以作为终止条件)
  2. 递归步骤:对于所有大于1的整数n,我们定义 factorial(n) = n * factorial(n - 1)

这样,当调用factorial(5)时,函数会按照以下方式进行:

  • factorial(5) = 5 * factorial(4)
  • factorial(4) = 4 * factorial(3)
  • factorial(3) = 3 * factorial(2)
  • factorial(2) = 2 * factorial(1)
  • factorial(1) = 1 (基本情况,递归停止)

然后从最底层的结果开始逐级返回,最终得到factorial(5)的结果。

在实际应用中
递归可以简化代码并清晰地表达某些类型问题的解决方案
但它也可能带来效率上的挑战
因为每次递归调用都会产生额外的系统开销,如栈空间的使用等
因此,递归需要谨慎使用,并且在必要时进行优化
比如引入缓存机制(动态规划)或尾递归优化等。
该用还得用,自己小心点就行,不要运行太久,卡主了即可
可以断开,分段,细化执行时间也可以
在这里插入图片描述

一行递归

简单的递归示例——计算阶乘(Factorial)。
阶乘是一个数的连乘积,例如5的阶乘(5!)就是 5 × 4 × 3 × 2 × 1。

以下是计算阶乘的两个不同实现版本:

单行递归版本:

def factorial(x): return 1 if x == 0 else x * factorial(x - 1)

在这段代码中,当输入x等于0时,返回1,因为任何数的0阶乘都定义为1。否则,通过递归调用factorial(x - 1)并乘以当前的x来计算阶乘。

多行递归版本:

def factorial(x):
    # 阶乘的基本情况(终止条件)
    if x == 0:
        return 1
    # 递归调用,计算阶乘
    else:
        return x * factorial(x - 1)

# 测试函数
print(factorial(5))  # 输出120,因为5! = 5 × 4 × 3 × 2 × 1

在这个多行版本中
我们同样定义了一个名为factorial的函数
但它的逻辑结构更加清晰
包括一个专门用于检查基本情况(x等于0时直接返回1)的if语句
以及在else部分进行递归调用的部分

总结

两种版本都能正确地计算阶乘,但对于初学者而言,多行版本可能更容易理解,因为它将函数的逻辑分步骤展示出来,每个步骤都有相应的注释说明其功能。而单行版本虽然简洁,但可能会对不熟悉这种写法的人来说显得比较晦涩难懂。
(看到没,初学者 不熟悉 都汤姆是阶层分割,努力向上爬吧!)
在这里插入图片描述

结尾

一年又一年
一行又一行
年年岁岁花相似
岁岁年年人不同
在这里插入图片描述
那么
有缘再见!

文章来源:https://blog.csdn.net/qq_39471885/article/details/135344061
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。