Rea*_*ion 13 r greatest-common-divisor
所以我正在尝试学习R并使用一些资源,包括一本名为"使用R发现统计数据"和其他一些很酷的电子书.
我理解编程中的一个很好的方法是Euclid算法.
在循环中实现它可以像这样实现:
gcd(x,y) //assuming x is the largest value
//do
r = x%y;
x = y;
y = r;
//while r != 0;
return x;
Run Code Online (Sandbox Code Playgroud)
在Google上进行了几次搜索后,SO和Youtube刷新了我对gcd算法的记忆,我找不到一个不使用循环的内存.甚至递归方法似乎都使用循环.
如何在不使用循环或if语句的情况下在R中实现这一点?
提前致谢.
Mat*_*erg 23
if从字面上使用语句"无循环或语句",这是一个递归版本,它使用ifelse:
gcd <- function(x,y) {
r <- x%%y;
return(ifelse(r, gcd(y, r), y))
}
Run Code Online (Sandbox Code Playgroud)
有人可能没想到,但这实际上是矢量化的:
gcd(c(1000, 10), c(15, 10))
[1] 5 10
Run Code Online (Sandbox Code Playgroud)
使用的解决方案if不会处理长度大于1的向量.
减少两个整数的 GCD 使您能够计算任何整数序列(排序或未排序)的 GCD:
gcd2 <- function(a, b) {
if (b == 0) a else Recall(b, a %% b)
}
gcd <- function(...) Reduce(gcd2, c(...))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9258 次 |
| 最近记录: |