左手Python 右手R —— 前N阶乘求和、金字塔数求和


前言

  此专栏为python与R语言对比学习的文章;以通俗易懂的小实验,带领大家深入浅出的理解两种语言的基本语法,并用以实际场景!感谢大家的关注,希望对大家有所帮助。
  “博观而约取,厚积而薄发!”谨以此言,望诸君共勉

  本文将两个小实验整理拼凑在了一起 ;分别是“前N阶乘求和、金字塔数求和”。具体的项目介绍见下文。


1、前N阶乘求和

  阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号,是数学术语。
n ! = 1 ∗ 2 ∗ 3 ∗ . . . ∗ ( n − 1 ) ∗ n n!=1*2*3*...*(n-1)*n n=123...(n1)n
  或者可以使用递归方式定义:
n ! = { 1 n=0 n ( n − 1 ) ! n>=1 n!=\left\{\begin{array}{ll} 1 & \textrm{n=0}\\ n(n-1)!& \textrm{n>=1} \end{array} \right. n!={1n(n1)!n=0n>=1
  对其前N项阶乘求和即是 s u m ( 1 ! + 2 ! + 3 ! + . . . + n ! ) sum(1!+2!+3!+...+n!) sum(1!+2!+3!+...+n!),有了以上的理论基础,我们一起看看图解,加强一下理解 !

1.1 图解问题

在这里插入图片描述
  如图,如果要输出每一个值 ,可以嵌入循环的思想,每一次将前一个值进行乘法运算即可!

1.2 算法流程

在这里插入图片描述
在此可以看到 ,我们需要加以人工控制需要算前多少项。在循环体内,这是对阶乘数的累加和赋值。

1.3 代码实现

1.3.1 python代码实现

n = int(input("n = "))
s = 0
t = 1
for i in range(1,n+1):
    t*=i
    s+=t
print ("前{}阶乘的和是:{}" .format(n,s))

在这里插入图片描述

1.3.2 R语言代码实现

factorial <- function(n){
  n <<-  as.integer(readline("请输入需要阶乘个数(从 1 开始):"))
  fac = 1
  ans = 0
  for (i in 1:n) {
    fac = fac * i
    ans = ans + fac 
  }
  return(ans)
}
test_3 <- function(){
  print("前n阶乘之和为:")
  factorial(n)
}
test_3()

在这里插入图片描述

1.4实验小结

  这个实验核心的点是循环的使用;
  至于R代码部分均使用函数的形式进行包装方便理解;函数内部采用互动的方式,便于拓展使用。有需要了解的留言或私信。

2、金字塔数求和运算

  此处的金字塔是真金字塔;就按简单的金字塔形状的数字:在这里插入图片描述

   求 s = a + a a + a a + a a a + a a . . . a s=a+aa+aa+aaa+aa...a s=a+aa+aa+aaa+aa...a的值,其中 a 是一个数字。例如: 2 + 22 + 222 + 2222 + 22222 2+22+222+2222+22222 2+22+222+2222+22222
   (此时共 有 5 个数相加),几个数相加由键盘控制。

2.1 图解问题

在这里插入图片描述
  通过对每一层金字塔数的拆解,即可得到如下的通项公式:
F n = { 2 n=1 10 ( n − 1 ) + 2 n>1 F_{n}=\left\{\begin{array}{ll} 2 & \textrm{n=1}\\ 10(n-1)+2& \textrm{n>1} \end{array} \right. Fn={210(n1)+2n=1n>1
  这样问题不久又解决了吗?与上面的前n项阶乘求和一样,使用循环求出每一层数,然后求和。

2.2 算法流程

在这里插入图片描述
  与上面实验基本没有差异;主要是循环体的算法不同而已。此处不做讲解了。

2.3 代码实现

2.3.1 python代码

a = int(input("请输入需要a的值:"))
n = int(input("请输入需要n的值:"))

Fn = 0
pyr = []

for i in range(n):
    Fn = Fn + a
    a = a*10
    pyr.append(Fn)
    print(Fn)
print("前{}个数的和为:{}".format(n, sum(pyr)))

在这里插入图片描述

2.3.2 R语言代码实现

sum_pyr <- function(){
  
  a <- as.integer(readline("请输入a的值:"))
  n <- as.integer(readline("请输入n的值:"))
  
  Fn <- 0
  pyr <- c()
  
  for (i in 1:n) {
    Fn <- Fn + a
    a <- a * 10
    pyr[i] <- Fn
    print(Fn)
  }
  
  ans <<- sum(pyr)
  
}
test_4 <- function(){
  print("金字塔为:")
  sum_pyr()
  print("求和结果为:")
  ans
}
test_4()

在这里插入图片描述

2.4 实验小结

这个实验核心的点是循环的使用;
  至于R代码部分均使用函数的形式进行包装方便理解;函数内部采用互动的方式,便于拓展使用。有需要了解的留言或私信。

总结

  这是左手Python右手R系列的第2片文章,希望大家能喜欢这个系列。

创作不易,都浏览到这儿了,看官可否将下面的收藏点赞帮忙点亮。

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铭记yu心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值