左手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!=1∗2∗3∗...∗(n−1)∗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(n−1)!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(n−1)+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语言语法小结
获取键盘输入值——input()函数 VS readline()函数
本文主要对for循环玩法进行了加深一步的介绍 。以及 R语言的函数体也是今后常用的结构体!
针对于R语言循环和R语言函数体详情可以查看往期文章链接: R语言|for循环————R语言入门到入土系列(八)、R语言 自定义函数之趣味程序–老虎机
这是左手Python右手R系列的第2片文章,希望大家能喜欢这个系列。