22讲,递归
def factorial(n):if n == 1:
return 1
else:
return n * factorial(n-1)
如果n = 5
为什么if n == 1:不是一直循环吗?最后结果不是等于1吗?为什么最后返回的是return n*factorial(n-1)的n
return 1
return 意味着这个函数这一次的执行告一段落 不,不是你想的这样,它是将每次执行函数的返回值再次作为函数的参数,进行计算 本帖最后由 _2_ 于 2020-4-1 18:43 编辑
factoral(2) 就会返回 2 × factoral(1),由于第二次执行时 n == 1,
所以最终返回的就是2 × 1 = 2 你这个函数计算的是5的阶乘,因为if是判断语句,不是循环语句,更不是赋值,输入n=5之后,if语句判断5不等于1,所以执行else return 只是返回当前函数,并不是返回整个递归。 _2_ 发表于 2020-4-1 18:41
factoral(2) 就会返回 2 × factoral(1),由于第二次执行时 n == 1,
所以最终返回的就是2 × 1 = 2
为什么第二次执行时 n == 1就会停下来然后返回2*1=2
不能返回1吗?它不是n == 1时就返回1吗? zltzlt 发表于 2020-4-1 18:58
return 只是返回当前函数,并不是返回整个递归。
那if n == 1: 时它不是return 1不是已经返回1了吗?不应该最后返回的是1
为什么反而是return n * factorial(a-1)
-Francis. 发表于 2020-4-2 07:59
那if n == 1: 时它不是return 1不是已经返回1了吗?不应该最后返回的是1
为什么反而是return n * factor ...
只是返回一层递归。 zltzlt 发表于 2020-4-1 18:58
return 只是返回当前函数,并不是返回整个递归。
它不用返回1吗?
返回1不应该n=1吗?
-Francis. 发表于 2020-4-2 08:02
它不用返回1吗?
返回1不应该n=1吗?
返回 1 只是返回一层,在函数中多次调用了自身 zltzlt 发表于 2020-4-2 08:03
返回 1 只是返回一层,在函数中多次调用了自身
如果n==2时不应该是在返回return n * factorial(n-1)后
n == 1:再返回return 1吗?
返回1只是一层什么意思??
-Francis. 发表于 2020-4-2 07:59
那if n == 1: 时它不是return 1不是已经返回1了吗?不应该最后返回的是1
为什么反而是return n * factor ...
它会把另一个函数的返回值相乘再返回,这是一个回溯的过程 _2_ 发表于 2020-4-2 08:54
它会把另一个函数的返回值相乘再返回,这是一个回溯的过程
if n == 1:只能return 1吗?
-Francis. 发表于 2020-4-2 09:13
if n == 1:只能return 1吗?
你愿意return几就return几 def factorial(n):# 定义一个函数,可以接受一个参数,看你函数的运算,参数只能是int类型
if n == 1: #条件判断,如果n为1
return 1 #返回一个int 1
else:#如果n不为1
return n * factorial(n-1)#递归运算
你举得例子:
- 如果n为5,参数传入后,条件判断n不为1
- 执行else后的语句,
- 递归传入n-1,也就是4
······················
- 递归直到传入的参数为1,返回1,结束
- 实际上就是5*4*3*2*1 n = 5 --> return 5 * factorial(4)
n = 4 --> return 4 * factorial(3)
n = 3 --> return 3 * factorial(2)
n = 2 --> return 2 * factorial(1)
n = 1 --> return 1 #此处的值1是返回给上一层的factorial(1)的,然后上一层的值变成2 * 1返回给再上一层factorial(2),这样一层一层返回到最上面就变成return 5*4*3*2*1,那就是120啦
页:
[1]