fengjianyx 发表于 2022-3-26 19:29:24

新人每日一问,神马是递归,听了打瞌睡


[*]什么是递归,听了打瞌睡{:5_104:}

[*]有没有大佬生动形象地讲一讲的?
[*]后续用的多吗?

ba21 发表于 2022-3-26 19:41:43

你打开一个文件夹,下面有很多子文件夹和文件。你把这些子文件夹和文件找出来的过程就叫递归。
1. 已知条件,你知道当前文件夹的名字,其后的你都不知道。
2. 你进入当前文件夹后,你可以看到它下面的文件夹和文件,但是这些文件夹下面的内容你还是不知道,所以你要一层一层的进入,然后返回,这样一遍一遍的进入,再一遍一遍返回;再一遍一遍的进入另一个文件夹,再一遍一遍返回的过程。

所以递归有2大条件:
1. 函数里面要调用函数本身
2. 结束条件。(什么时候返回)

递归在某些情况下是唯一的选择。用得多。

ba21 发表于 2022-3-26 19:48:48

Gacy 发表于 2022-3-26 20:24:22

自己调用自己

SJQ007 发表于 2022-3-30 15:45:29

本帖最后由 SJQ007 于 2022-4-6 14:22 编辑

比如一个任务:SUM(n)=1+2+3+...+n,现在n=100,让你算
你觉得SUM(100)太难了,复制了一个自己(调用自己)叫复制人1,让他算SUM(99),知道了SUM(99),你只需要SUM(99)+100就得到SUM(100)了
复制人1觉得SUM(99)还是太难,又造了一个复制人2,让他算SUM(98),他的SUM(99)就好算了
以此类推,复制人98的任务是算SUM(2)=1+2,他觉得很简单,向复制人97返回了结果3
复制人97拿到了SUM(2),加个3,结果是6,又向复制人96汇报了
以此类推,复制人1拿到了SUM(99),汇报给你,你再加个100,就做完了
代码就是:
def SUM(n)
    if n==2:
      return 3
    else:
      return SUM(n-1)+n

yixinwenxin 发表于 2022-3-30 23:03:45

递归-->有递   有归
上个月我也问过      希望我理解的代码对你有用
def power(x, y):
    if y == 0:
      print(f"y == 0 , y : {y} , x : {x}")
      return 1
    else:
      print(f"递 : y : {y} , x : {x}")

      """
      递 : y : 2 , x : 4
      递 : y : 1 , x : 4
      """

      y = power(x, y-1) * x
      print(f"归 : y : {y} , x : {x}")
      """
      归 : y : 4 , x : 4
      归 : y : 16 , x : 4
      """
      return y

print(power(y=2,x=4))
"""
16
"""

Stubborn 发表于 2022-4-2 16:24:54

本帖最后由 Stubborn 于 2022-4-2 16:30 编辑

一楼的例子很形象,在举个例子:并且为用函数表达出来
一个快递员坐电梯收包裹,也许这个电梯有很多层,但是这个快递只负责收到第七层的包裹,他在第一层收到一个包裹,第二次收到两个包裹,一次类推,收到第七层。编写函数,计算他会收到多少个包裹

def elevator(n=1): # 从1层开始收包裹
    if n == 7: # 他只收到第第七层
      return 7 #最后一层7个包裹
    return n + elevator(n+1)# 1层+ 下一层的包裹

页: [1]
查看完整版本: 新人每日一问,神马是递归,听了打瞌睡