wangxinnan 发表于 2019-6-11 11:06:00

关于for循环返回结果的一些问题

在书中第六章,函数中,递归这一节里,其中
def recursion(n):
    result = n
    for i in range(1,n):
      result *= i
    return result
我们应该如何理解,为什么是返回的结果是1*2*3*4*5啊?

按照for循环,range(1,n),假设n为5,那么返回应该是1,2,3,4
result *= i
就是5 *= i
那最终return result不是应该为5*1 +5*2+ 5*3+ 5*4的结果么?
网上也没查到合理的解释

如果强行就是理解为阶乘,可是后来我做了测试那么下边 ** 应是冥次方,为什么返回的结果又是5了?

>>> def recursion(n):
        result = n
        for i in range(1,n):
                result ** i
        return result

>>> recursion(5)
5

求大神解答。。。

shake_a_tree@16 发表于 2019-6-11 11:08:57

result *= i等价于 result =result * i

冬雪雪冬 发表于 2019-6-11 11:10:04

设n=5
循环前result = 5
第一次循环result= 5* 1
第二次result=5*1*2
3次result=5*1*2*3
4次result=5*1*2*3*4

shake_a_tree@16 发表于 2019-6-11 11:14:32

shake_a_tree@16 发表于 2019-6-11 11:08
result *= i等价于 result =result * i

这里面是没有加号的

wangxinnan 发表于 2019-6-11 11:15:41

冬雪雪冬 发表于 2019-6-11 11:10
设n=5
循环前result = 5
第一次循环result= 5* 1


如果是这样算的话,
>>> def recursion(n):
      result = n
      for i in range(1,n):
                result ** i
      return result

>>> recursion(5)
5
请问一下这个怎么理解呢?

冬雪雪冬 发表于 2019-6-11 11:34:20

不是result ** i
是result *= i
如果是result ** i,计算的乘方,但没有赋值给任何变量名。

年轮荡漾 发表于 2019-6-11 16:23:52

wangxinnan 发表于 2019-6-11 11:15
如果是这样算的话,
>>> def recursion(n):
      result = n


以为你那个result**i是没有意义的,你写成result=result**i,再试试。

迷茫的兔子 发表于 2019-6-12 22:19:42

设n=5
那么,result *= i   就为 5*1*2*3*4,而且前面你也说了,是递归函数,递归函数的核心就是调用自己,如果改为result ** i的话,并不是递归函数,并且 for循环至取最后一次结果
页: [1]
查看完整版本: 关于for循环返回结果的一些问题