鱼C论坛

 找回密码
 立即注册
查看: 2246|回复: 7

用f-string改的话这样对吗?

[复制链接]
发表于 2023-6-10 16:44:17 | 显示全部楼层 |阅读模式

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

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

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

number = int(input('请输入一个整数:'))
result = recursion(number)
print('%d的阶乘是:%d' % (number, result)) # 是不是可以用f-string写成print(f'{number}的阶乘是:{result}')?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-10 16:47:14 | 显示全部楼层
是的,你的想法是正确的。你可以使用f-string来改写你的print语句。Python 3.6及以后的版本引入了f-string,这是一种新的字符串格式化方法,可以使代码更易读和编写。

你的print语句可以被改写成以下样子:
print(f'{number}的阶乘是:{result}')

这样,你的完整代码就会变成:
def recursion(n):
    result = n
    for i in range(1, n):
        result *= i
    return result

number = int(input('请输入一个整数:'))
result = recursion(number)
print(f'{number}的阶乘是:{result}')

注意,尽管你的代码能正常运行,但是名为 recursion 的函数实际上并不是递归的。这可能会导致一些混淆。如果你想计算阶乘的递归版本,可以这样写:
def recursion(n):
    if n == 0:
        return 1
    else:
        return n * recursion(n-1)

number = int(input('请输入一个整数:'))
result = recursion(number)
print(f'{number}的阶乘是:{result}')
这个函数会递归地调用自身,直到n等于0,然后返回1,这就是阶乘函数的基本定义。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-10 16:47:32 | 显示全部楼层
这是一个计算数字阶乘的Python代码。函数名为recursion,它接受一个整数作为输入。然后,它将整数乘以从1到n-1的所有数字。以下是代码:
def recursion(n):
    result = n
    for i in range(1, n):
        result *= i
    return result

number = int(input('请输入一个整数:'))
result = recursion(number)
print('%d的阶乘是:%d' % (number, result))
但是,Python有一个内置函数叫做math.factorial(),可以用来计算数字的阶乘。以下是示例:
import math

number = int(input('请输入一个整数:'))
result = math.factorial(number)
print(f'{number}的阶乘是:{result}')
希望这可以帮助您!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-10 17:21:45 | 显示全部楼层
isdkz 发表于 2023-6-10 16:47
是的,你的想法是正确的。你可以使用f-string来改写你的print语句。Python 3.6及以后的版本引入了f-string ...

计算阶乘的递归版本的运行逻辑没看懂,可否指点下?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-10 17:22:35 | 显示全部楼层
陶远航 发表于 2023-6-10 16:47
这是一个计算数字阶乘的Python代码。函数名为recursion,它接受一个整数作为输入。然后,它将整数乘以从1到 ...

谢谢大神的指点,

不需要自己造轮子,就可以拿来直接用啊,math.factorial()这个厉害了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-10 18:29:59 | 显示全部楼层
lzb1001 发表于 2023-6-10 17:21
计算阶乘的递归版本的运行逻辑没看懂,可否指点下?

当然可以。计算阶乘的递归版本的逻辑其实是相当直观的。首先我们要理解什么是阶乘。

阶乘是一种数学运算,由一个非负整数和所有小于它并且大于0的正整数的乘积构成。阶乘通常被标记为n!。比如说,5的阶乘就是  5 * 4 * 3 * 2 * 1 = 120 。对于0的阶乘,按照定义,其结果是1。

现在,让我们看看如何用递归的方式来实现这个操作。基本的思想是这样的:我们知道n的阶乘就是n乘以(n-1)的阶乘。换句话说, n! = n * (n-1)! 。

以下是我们如何将这个思想应用到代码中:
def recursion(n):
    if n == 0:         # 基线条件 (base case)
        return 1
    else:              # 递归条件 (recursive case)
        return n * recursion(n-1)

这个函数的工作原理如下:

1. 首先检查基线条件(也就是递归结束的条件)。在这种情况下,如果n等于0,我们就直接返回1,因为我们知道0的阶乘是1。

2. 如果n不等于0,我们就进入递归条件。在这里,我们返回n乘以(n-1)的阶乘。但是我们并不直接知道(n-1)的阶乘是多少,所以我们通过调用 recursion(n-1) 来求解。

每次调用 recursion(n-1) 时,n都会减少1,直到n等于0。当n等于0时,递归调用结束,函数返回1。然后,这个1会被返回到上一层的递归调用中,被乘以2,结果再返回到再上一层的调用中,被乘以3,以此类推,直到返回到最初的调用,得到n的阶乘。

希望这个解释能帮助你理解递归阶乘的工作原理!如果你还有其他问题,欢迎随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-10 20:45:20 | 显示全部楼层
isdkz 发表于 2023-6-10 18:29
当然可以。计算阶乘的递归版本的逻辑其实是相当直观的。首先我们要理解什么是阶乘。

阶乘是一种数学运 ...

刚发现你提供的代码是:

def recursion(n):
    if n == 0:
        return 1
    else:
        return n * recursion(n-1)

而小甲鱼教材上的代码是:

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)

注意两个代码红色字体的区别

为何代码不同却可以返回相同的结果?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-10 21:22:37 | 显示全部楼层
lzb1001 发表于 2023-6-10 20:45
刚发现你提供的代码是:

def recursion(n):

这是一个很好的问题。这两段代码虽然看起来有些不同,但它们实际上都能正确地计算阶乘,只是选择的基线条件不同。

在你给出的第一段代码中,基线条件(也就是递归停止的条件)被设定为 n == 0 ,返回的值是1。这是因为在数学上,我们定义0的阶乘(0!)为1。

而在第二段代码中,基线条件被设定为 n == 1 ,返回的值也是1。这是因为1的阶乘(1!)自然是1。

虽然两段代码的基线条件不同,但它们都能正确地计算阶乘。这是因为当 n 的值减小到达到基线条件时,递归就会停止,返回1。

例如,对于 factorial(3) 的计算,在第二段代码中,过程会是这样的:

·  factorial(3)  = 3 *  factorial(2)
·  factorial(2)  = 2 *  factorial(1)
·  factorial(1)  = 1 (基线条件达成)

然后,递归调用开始返回,计算结果:

·  factorial(2)  = 2 * 1 = 2
·  factorial(3)  = 3 * 2 = 6

可以看出,尽管基线条件不同,两段代码都能正确地计算出阶乘。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 22:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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