hhzczy 发表于 2018-10-25 22:45:57

编程小白,编程好难啊~~又有py的问题了

以下是小甲鱼讲py递归的时候的一段“没用递归方法”求正整数阶乘的代码。
在假设n=1的情况下的我有一些疑问,直接用#标注在以下代码里了。


# 非递归版本
def recursion(n):
    result = n                #如果n=1
    for i in range(1, n):                #range(1,1),试了一下,这东西为空
      result *= i                #【 result = result * 空 】,这是个神马玩意儿????怎么理解这里。
    return result

number = int(input('请输入一个正整数:'))
result = recursion(number)
print('%d 的阶乘是:%d' % (number, result))

'''
请输入一个正整数:6
6 的阶乘是:720
'''

塔利班 发表于 2018-10-25 22:48:37

1不进入循环直接返回,range(1,1)是空范围

hhzczy 发表于 2018-10-25 23:00:41

本帖最后由 hhzczy 于 2018-10-25 23:02 编辑

塔利班 发表于 2018-10-25 22:48
1不进入循环直接返回,range(1,1)是空范围

我知道1不循环,因为1的阶乘就是它自己嘛,没有人跟它乘。
单纯看代码:
我好奇的是第4行range(1, 1)是个“空”
那么for i in range(1, 1): 就表示这个“空的range里边的元素”,这是个什么东西呢?
第5行这个东西还要去和result去乘

塔利班 发表于 2018-10-25 23:04:22

空范围所以取不出来元素,所以不循环,result在循环里乘,
所以谁和他乘??

hhzczy 发表于 2018-10-25 23:07:51

本帖最后由 hhzczy 于 2018-10-25 23:08 编辑

塔利班 发表于 2018-10-25 23:04
空范围所以取不出来元素,所以不循环,result在循环里乘,
所以谁和他乘??

也就是:
n=1 的时候,第4、5行都不起作用是吧?
直接卡从第3行跳到6行?

还是说:1*空=1

塔利班 发表于 2018-10-25 23:08:33

hhzczy 发表于 2018-10-25 23:07
也就是:
n=1 的时候,第4、5行都不起作用是吧?
直接卡从第3行跳到6行?

对啊。。
页: [1]
查看完整版本: 编程小白,编程好难啊~~又有py的问题了