用Python进行1的阶乘到10的阶乘相加的计算

用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语言的函数调用(对于有返回值和无返回值,难度理解对比有很大的不同,特别是运用到了指针之后)。如觉得内容稍可,希望留下你们的
在这里插入图片描述

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

  • 15
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值