wangye666 发表于 2022-11-5 20:58:10

python函数递归问题

1、当输入feb(4)时,代码里面的return是feb(3)+feb(2),也就是返回值为feb(3)+feb(2),这不是没有调用吗,为什么能计算feb(4)呢?
2、视频中说递归在函数体中要有一个结束条件,且每次递归都朝着结束条件靠近,但是这个里面没有限制条件,为什么能够自动停止?

fcage 发表于 2022-11-5 21:06:11

你在return调用函数了,这里return的是函数的返回值
就像return 5*9
它要先计算return后面的值,比如5*9,它要算出45之后才return 45

同理,你这里就是正常的调用函数feb(),会先调用函数,feb返回值之后才return

jackz007 发表于 2022-11-5 21:06:20

本帖最后由 jackz007 于 2022-11-5 21:26 编辑

def feb(n):
    if n == 1 or n == 2:                   # 如果输入参数 n == 1 或者 n == 2
      return 1                           # 那就返回 1
    else:                                  # 否则(n > 2)
      return feb(n - 1) + feb(n - 2)   # 用减小的输入参数,继续递归
      1、feb(4) = feb(3) + feb(2) = feb(2)+ feb(1) + feb(2) = 1 + 1 + 1 = 3

      2、当 n == 1 和 n == 2 时,feb(n) 有确定的值 1,而没有继续调用 feb(n - 1) 和 feb(n - 2),这就是递归的结束条件。feb(n - 1) + feb(n - 2) 就是在逐步向结束条件(n == 1 or n == 2)靠近。

wangye666 发表于 2022-11-5 21:07:29

fcage 发表于 2022-11-5 21:06
你在return调用函数了,这里return的是函数的返回值
就像return 5*9
它要先计算return后面的值,比如5*9 ...

请问第二个问题为什么知道吗

柿子饼同学 发表于 2022-11-5 21:08:41

返回值为 feb(3) + feb(2) 的 时候 , 它还是 feb 函数里 , 又要去看:
feb(3) == feb(2) + feb(1) == 1 + 1 == 2
feb(2) == 1
然后再返回来 , feb(4) == 2 + 1 == 3

这里的限制条件就是 当 n == 1 或 n == 2 时 , 返回 1
可以看出 , 当输入任意一个大于1 的整数最后减着减着早晚会到 1 或者 2 , 从而返回

wangye666 发表于 2022-11-5 21:13:13

柿子饼同学 发表于 2022-11-5 21:08
返回值为 feb(3) + feb(2) 的 时候 , 它还是 feb 函数里 , 又要去看:
feb(3) == feb(2) + feb(1) == 1 + 1 ...

请问第二个问题知道为什么吗,这里不是没有结束条件吗,只有返回值,为什么到feb(1)和feb(2)就不在执行了呢?

wangye666 发表于 2022-11-5 21:19:01

jackz007 发表于 2022-11-5 21:06
1、feb(4) = feb(3) + feb(2) = feb(2)+ feb(1) + feb(2) = 1 + 1 + 1 = 3

      2、当 n = ...

请问第二个问题知道为什么吗,这里不是没有结束条件吗,只有返回值,为什么到feb(1)和feb(2)就不在执行了呢?

jackz007 发表于 2022-11-5 21:22:17

wangye666 发表于 2022-11-5 21:19
请问第二个问题知道为什么吗,这里不是没有结束条件吗,只有返回值,为什么到feb(1)和feb(2)就不在执行了 ...

      你得明白,什么叫 "递归",函数自己调用自己叫递归,当输入参数 n 大于 2 的时候,feb() 是会继续递归调用自己的,而当 n == 1 或者 n == 2 的时候,函数不再继续递归,开始返回确定的数值,这就是递归到底或者叫递归结束。

柿子饼同学 发表于 2022-11-5 21:29:53

wangye666 发表于 2022-11-5 21:13
请问第二个问题知道为什么吗,这里不是没有结束条件吗,只有返回值,为什么到feb(1)和feb(2)就不在执行了 ...

你看看 , 到 1 或 2 的时候 , 就返回去 了 , 就 return 了
所以到这就回来了
页: [1]
查看完整版本: python函数递归问题