用Python实现1的阶乘到10的阶乘相加之和
对于阶乘我们不得不想到迭代,但其实除了迭代还有其他的办法,这里我将介绍我知晓的几种方法:
首先我们应知道迭代和递归的区别:
递归是针对于函数来讲的,我们常说函数递归调用,这是函数的一种调用方法。
而迭代是针对结构的,它是在结构里面的进行的,如在循环结构里面进行迭代。
了解了这些之后,下面进行方法讲解,首先我们先使用迭代法,具体代码及运行结果如下:

方法一:使用普通迭代方法求解

#方法一
def multiplication(i):
    sum =1
    for j in range(1,i+1):
        sum *=j           #这里我们使用迭代的方法对阶乘进行计算,
    return sum
mul = 0
for i in range(1,11):
    mul +=multiplication(i)
print("请输出1-10的阶乘之和:%d"%mul)

在这里插入图片描述
这是最终的结果,当然我们可以拆解这个步骤,与我发的1-500之间素数的和一样,首先要有个构思:
第一步,如何实现从一个数据开始并依次-1进行乘法,这肯定需要一个循环语句,那么又如何操作下去,进行迭代,设好变量,将所设变量进行持久往复使用。
第二步,那么我们现在开始实现一个阶乘的迭代,如代码所示,使sum和j一直进行使用,直接调用multiplication()函数实验,此时不考虑下方的for循环。
第三步,最后尝试用for循环将题目要求的1-10各数据进行遍历阶乘相加,得到结果。
这是第一种方法,接下来展示

方法二:使用递归函数调用求解

代码及运行结果如下:
#方法二
def multiplication(i):
    sum = 1
    if i==0:
        return 1
    elif i>0:
        sum = i*scan(i-1)  #在这里我们使用的是递归调用方法,用变量sum进行一个阶乘的值并返回
        return sum
    else:
        return 0 
mul = 0
for i in range(1,11):
    mul += multiplication(i)
print("请输出1-10的阶乘之和:%d"%mul)

具体思路还是和上面一样,但是创建的递归函数是由函数自身进行相乘,这与上面讲的迭代和递归的区别进行理解,这里递归的原理不进行详解。

方法三:使用reduce函数进行迭代求解

#方法三
from functools import reduce                 #声明加载functools中的函数reduce,相当于C语言中的宏文件声明
def multiplication(i):
    a = 0
    for j in range(1,i+1):                           #lamdba函数是自己所调用使用的虚拟函数,相当于对Java语言中的抽象类中的抽象方法进行重写
        a +=reduce(lambda x,y:x*y,range(1,j+1))     #这里使用for循环进行1-10的数进行遍历阶乘,类似于迭代,最终用a承载并返回
    return a                                        #是方法一的简化版
print("请输出1!+...+10!之和为:{}".format(multiplication(10)))

首先介绍reduce函数的用法及工作过程,调用格式为:reduce(function ,sequence[,initial])
function为含有两个参数的函数,sequence是元组,列表等可迭代对象,initial为自定义的迭代初始值(可选可不选),在迭代sequence时,默认将前两个元素传给function,函数运行后将返回值与sequence中的第三个元素继续传给function进行计算,如此往下,依次进行。
我这里使用的是lamdba虚拟函数作为reduce函数内的函数使用,可理解为嵌套。lamdba是一个表达式,一个匿名函数,自己定义参数列表,自己定义函数主体。其他的作用及限制不再描述。
从代码中可看出相对于方法一来说,方法三更简便,至少少了一个for循环。具体内容还需要读者仔细推敲。
对于函数的嵌套,递归等,之后写一篇关于C语言的函数调用(对于有返回值和无返回值,难度理解对比有很大的不同,特别是运用到了指针之后)。如觉得内容稍可,希望留下你们的
在这里插入图片描述

如有疑问,欢迎下方留言!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐