【发布时间】:2021-03-11 21:26:44
【问题描述】:
我被提示了一个问题,并且非常接近解决我需要的问题。问题如下-
“编写一个 while 循环,计算任何非负整数 mynum 的阶乘并将其存储为一个新对象,方法是在每次重复大括号代码时将 mynum 减 1。”
另一个因素是,如果输入 0 或 1,则输出将为 1。
我写的代码如下-
factorialcalc <- function(i){
factorial <- 1
if(i==0 | i==1){
factorial <- 1
} else{
while(i >= 1){
factorial <- factorial * i
i <- i-1
}
}
return (factorial)
}
有输入-
mynum <- 5
factorialcalc(mynum)
和输出-
[1] 120
您可能想知道,“您的代码运行良好,那么问题出在哪里?” 我的问题在于问题的“计算和存储”部分。
如何修改我的代码以将 factorialcalc 的答案放入向量中?
示例- 我输入
mynum <- 5
factorialcalc(mynum)
和
mynum <- 3
factorialcalc(mynum)
和
mynum <- 4
factorialcalc(mynum)
当我调用这个新向量时,我希望看到一个包含所有三个输出的向量 (就像我制作了一个向量 c(120,6,24))
我在想有一种方法可以在我的函数或 while 循环中的某处添加这个向量,但我不确定在哪里。另外,请注意答案必须包含我的代码中的循环。
我要寻找的答案是一个空向量,比如answers <- c(),每次我要运行函数factorialcalc,在函数期间,我都会将factorial的返回结果添加到这个新的answers 向量。
我试过放这样的东西-
factorialcalc <- function(i){
factorial <- 1
answers <- c()
answers[i] <- answers[factorial]
if(i==0 | i==1){
factorial <- 1
} else{
while(i >= 1){
factorial <- factorial * i
i <- i-1
}
}
return (factorial)
}
这似乎行不通,但我认为这个想法是存在的。
提前感谢您的帮助。
【问题讨论】:
-
如果您在
for循环之前初始化一个空向量,您可以简单地在循环中附加一个新值。例如myvec <- numeric(); for... myvec <- c(myvec, newval)...length我的myvec将随着循环的每次迭代而增长。 -
这仅适用于
for循环吗?给我的问题是使用while循环来做到这一点 -
使用可以使用任何循环的方法。您还可以使用该方法来扩充对象列表。例如创建列表:
mylist <- list()并在循环内增加列表索引:mylist[[i]] <- newdf其中i是整数循环索引值。 -
这个问题和你之前的问题stackoverflow.com/questions/65057122/…有什么不同吗?
标签: r function if-statement while-loop factorial