python随想之python中的递归(关于递归打印有值 return显示None)

本文深入探讨了递归的基本概念,包括递归的定义、使用条件及终止条件的重要性。通过阶乘和斐波那契数列两个经典案例,详细解析了递归算法的设计思路与实现方法。同时,针对递归中常见的问题,如打印有值但return显示None的现象进行了深入剖析,提供了有效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

感谢大神 itmeng 的技术支持 在遇到问题的时候参考大神的解决方法 自己理解
递归(Recursion),在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。
使用递归的条件时 注意以下几点

  • 递归就是在过程或函数里调用自身
  • 必须明确递归终止的条件(防止函数无限调用)

递归的典型算法
求阶乘 以5的阶乘为例

def fun(n):
    if n<=1:
        return n
    return  n*fun(n-1)
print(fun(5))

递归实现斐波那契数列:

'''
斐波那契数列:
f(n) = 1 当n = 1,2时
f(n) = f(n-1) + f(n-2) 当n > 2时
比如: [1,1,2,3,5,8,13,21,34,55]
'''

def fibonacci(n):
    # 收敛条件
    if n <= 2:
        return 1
    # 递归公式
    return fibonacci(n-1) + fibonacci(n-2)


def main():
    print(fibonacci(10))


if __name__ == '__main__':
    main()

关于递归中打印有值 return显示None:
关于求和问题 使用递归时遇到了问题

def add(sum,x,y):
    if x<10:
        x+=2
        y+=2
        sum=x+y
        add(sum,x,y)
    else:
        sum=x+y
        print(sum)      #20
        return sum

s=add(0,0,0)
print(s)	#None

print输出的时候 显示的为None 在return 之前 打印有值 有返回值 为什么还是显示None
惯性思维让我们认为return必然会使得def函数模块结束返回一个值,可实际上在递归中并不是,如果改变约束条件在return之后函数还会继续递归计算。

真正的原因是此处的return仅仅是上一次递归调用函数本身时候的返回值,而def函数块并没有返回任何值。也就是说这个return仅属于上一次递归调用,并不属于def函数块。也就是说整个def函数块没有return,也就没有出口,自然不会有数据出去,所以得到None

递归的坑 是在看大神 itmeng 的博客的时候,看到了这个问题 然后自己修改代码如下:

def add(sum,x,y):
    if x<10:
        x+=2
        y+=2
        sum=x+y
        sum=add(sum,x,y)
        return  sum
    else:
        sum=x+y
        print(sum)
        return sum

s=add(0,0,0)
print(s)

函数运行到else时 有返回值,就相当于闭包的使用 在函数内部 需要对将函数的返回值进行返回

### 力扣 Hot 100 的快速入门方法与解题技巧 对于希望快速掌握 LeetCode Hot 100 题目并提高算法能力的学习者来说,以下是几个重要的策略和资源: #### 一、学习目标设定 为了高效利用时间,可以优先选择一些经典的数据结构和算法类别进行练习。LeetCode Hot 100 中涵盖了数组、链表、栈、队列、哈希表、二叉树等多种核心知识点[^1]。因此,在开始之前应明确自己的薄弱环节,并制定针对性计划。 #### 二、优质资料推荐 - **代码随想录**:这是一个非常受欢迎的博客系列,它按照不同主题整理了大量习题解析,帮助理解每种数据结构背后的思想以及如何应用到实际问题解决当中[^2]。 - **官方指南与讨论区**:LeetCode 自身提供了详尽的文章说明及社区互动功能,通过阅读高质量帖子可以获得多种思路启发[^3]。 #### 三、具体实践建议 1. **分模块训练** 将全部题目按难度等级或者所属领域划分成若干小组件逐一攻克。比如先完成所有简单级别的字符串处理类挑战后再进入更复杂的动态规划部分。 2. **总结归纳模式** 每做完一道新题之后都要回顾反思其解答过程是否存在通用规律可循?尝试找出相似之处以便日后遇到同类情况能够迅速反应出来。 3. **模拟真实场景测试** 使用限时做题的方式模仿真实的笔试环境, 这样不仅可以锻炼速度还能增强抗压能力. 4. **参与竞赛活动** 定期参加周赛月赛等活动不仅能检验阶段性成果而且有机会接触到最新趋势和技术热点. ```python # 示例代码片段展示递归思想应用于二叉树遍历 class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def inorderTraversal(root: TreeNode): result = [] def dfs(node): if not node: return dfs(node.left) result.append(node.val) # 访问当前节点的操作放在这里 dfs(node.right) dfs(root) return result ``` 以上就是针对 LeetCode Hot 100 提供的一些实用指导方针及相关工具链接分享给各位同学参考使用!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值