鱼C论坛

 找回密码
 立即注册
查看: 1001|回复: 17

[已解决]递归

[复制链接]
发表于 2022-2-12 12:37:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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循环
最佳答案
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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}')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-2-12 13:34:33 From FishC Mobile | 显示全部楼层
不,不是这样的,递归的话不能用微循环的话是在是函数调用自己的函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 13:35:14 From FishC Mobile | 显示全部楼层
想用一直问的话,你要在函数里面调用自己就是函数调用函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 13:35:45 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2022-2-12 12:45
参考代码:

衣柜不是循环,是调用自己。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 13:36:31 From FishC Mobile | 显示全部楼层
给你推荐一篇文章。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 13:37:24 From FishC Mobile | 显示全部楼层
https://fishc.com.cn/forum.php?mod=viewthread&tid=208562&extra=page%3D1&mobile=2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 13:39:11 From FishC Mobile | 显示全部楼层
记住递归并不是循环,它是函数调用自己,而且函数加有判断。到调用自己到一定程度的时候立即停止。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 13:40:42 From FishC Mobile | 显示全部楼层
你有什么不懂的可以问我亲,请你给我个最佳答案,亲。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 13:59:13 | 显示全部楼层
shiyouroc 发表于 2022-2-12 13:35
衣柜不是循环,是调用自己。




认真看代码~

factorial 函数就是递归函数

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 14:08:19 | 显示全部楼层
shiyouroc 发表于 2022-2-12 13:40
你有什么不懂的可以问我亲,请你给我个最佳答案,亲。

有点强迫了...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-12 15:41:31 | 显示全部楼层

我想问一下try在这里有什么作用吗,或者说为什么要用try
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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) 等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-12 17:37:29 | 显示全部楼层
傻眼貓咪 发表于 2022-2-12 16:50
try ... except ... 是异常处理。

try:

那您为什么会想到用try ...except了,直接print也可以打印得到结果耶,原谅喜欢刨根问底
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 ...(但如果我是用户,我会很皮的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-12 18:11:04 | 显示全部楼层
傻眼貓咪 发表于 2022-2-12 17:57
不要紧。
因为考虑到用户可能输入:(太多因素了)
字符串,如:"Hello World"

哈哈哈,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-12 18:13:28 | 显示全部楼层

不客气
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 06:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表