Lijingyang 发表于 2022-2-12 12:37:31

递归

def factorial(n):
    if n == 1:
      return 1
    else:
      return n*factorial(n-1)
number = int(input('请输入一个整数:'))
result = factorial(number)

print(f'{number}的阶乘是:{result}')
这个代码一次只能输入一个数,如果我想一直输数,应该如何使用while循环

Twilight6 发表于 2022-2-12 12:45:29



参考代码:
def factorial(n):
    if n == 1:
      return 1
    else:
      return n*factorial(n-1)

while True:
    number = input('请输入一个整数(直接回车退出程序):')
    if number == "":
      break
    result = factorial(int(number))
    print(f'{number}的阶乘是:{result}')

shiyouroc 发表于 2022-2-12 13:34:33

不,不是这样的,递归的话不能用微循环的话是在是函数调用自己的函数。

shiyouroc 发表于 2022-2-12 13:35:14

想用一直问的话,你要在函数里面调用自己就是函数调用函数。

shiyouroc 发表于 2022-2-12 13:35:45

Twilight6 发表于 2022-2-12 12:45
参考代码:

衣柜不是循环,是调用自己。

shiyouroc 发表于 2022-2-12 13:36:31

给你推荐一篇文章。

shiyouroc 发表于 2022-2-12 13:37:24

https://fishc.com.cn/forum.php?mod=viewthread&tid=208562&extra=page%3D1&mobile=2

shiyouroc 发表于 2022-2-12 13:39:11

记住递归并不是循环,它是函数调用自己,而且函数加有判断。到调用自己到一定程度的时候立即停止。

shiyouroc 发表于 2022-2-12 13:40:42

你有什么不懂的可以问我亲,请你给我个最佳答案,亲。

Twilight6 发表于 2022-2-12 13:59:13

shiyouroc 发表于 2022-2-12 13:35
衣柜不是循环,是调用自己。



认真看代码~

factorial 函数就是递归函数

傻眼貓咪 发表于 2022-2-12 14:04:01

factorial = lambda n: n if n == 1 else n*factorial(n-1)
while True:
    try: print(factorial(int(input("请输入一个整数:")))) # 如果输入不是整数,则退出
    except: break

python爱好者. 发表于 2022-2-12 14:08:19

shiyouroc 发表于 2022-2-12 13:40
你有什么不懂的可以问我亲,请你给我个最佳答案,亲。

有点强迫了...

Lijingyang 发表于 2022-2-12 15:41:31

傻眼貓咪 发表于 2022-2-12 14:04


我想问一下try在这里有什么作用吗,或者说为什么要用try

傻眼貓咪 发表于 2022-2-12 16:50:56

本帖最后由 傻眼貓咪 于 2022-2-12 16:53 编辑

Lijingyang 发表于 2022-2-12 15:41
我想问一下try在这里有什么作用吗,或者说为什么要用try

try ... except ... 是异常处理。

try:
    代码 xxx
except:
    如果代码 xxx 有异常,则执行这里的代码

所谓的异常有很多种,比如 13/0,或 int("Hello World) 等

Lijingyang 发表于 2022-2-12 17:37:29

傻眼貓咪 发表于 2022-2-12 16:50
try ... except ... 是异常处理。

try:


那您为什么会想到用try ...except了,直接print也可以打印得到结果耶,原谅喜欢刨根问底{:7_112:}

傻眼貓咪 发表于 2022-2-12 17:57:20

本帖最后由 傻眼貓咪 于 2022-2-12 17:59 编辑

Lijingyang 发表于 2022-2-12 17:37
那您为什么会想到用try ...except了,直接print也可以打印得到结果耶,原谅喜欢刨根问底

不要紧。
因为考虑到用户可能输入:(太多因素了)
字符串,如:"Hello World"
字符,如:'a' 或 '@'
数字太大,超于可算出的范围,如:123456789123456789123456789123 .....

这样一来,就不用把所有输入可能一行一行写出来,如:

if ord(number) < '0' and ord(number) > '9':
    xxxx
elif int(number) > xxxxxxxxxx:
    xxx
elif xxxxxx:
    xxxxx
else:
    xxxx

直接用 try(代码可以运行就运行,不可以就退出,编译器也不会报错)

当然如果你认为用户不调皮,完全跟着条件输入,你也可以不用 try ... except ...(但如果我是用户,我会很皮的{:10_277:} )

Lijingyang 发表于 2022-2-12 18:11:04

傻眼貓咪 发表于 2022-2-12 17:57
不要紧。
因为考虑到用户可能输入:(太多因素了)
字符串,如:"Hello World"


哈哈哈,谢谢

傻眼貓咪 发表于 2022-2-12 18:13:28

Lijingyang 发表于 2022-2-12 18:11
哈哈哈,谢谢

不客气 {:10_257:}
页: [1]
查看完整版本: 递归