【发布时间】:2019-05-11 03:33:17
【问题描述】:
我正在尝试将 while 循环转换为递归。
我知道 while 循环更有效,但我试图了解如何将 for/while 循环转换为递归,并将递归转换为 for/while/if 循环。
我使用while 循环时的功能:
harmon_sum <- function(x){
n <- 1
sum <- 0
while (sum < x)
{
sum <- sum + (1/n)
n <- (n +1)
}
return(n)
}
此函数采用一些数值,假设为x=2,并返回您需要求和的对象数量,以便创建比 x 更大的数字。 (对于 x=2,您需要总结调和和的前 5 个对象)
[![harmonic sum][1]][1]
**example**: `harmon_sum <- function(x){
n <- 1
sum <- 0
while (sum < x)
{
sum <- sum + (1/n)
print(sum)
n <- (n +1)
print(n)
}
return(n)
}
> harmon_sum(x =2)
[1] 1
[1] 2
[1] 1.5
[1] 3
[1] 1.833333
[1] 4
[1] 2.083333
[1] 5
[1] 5`
我的递归函数版本:
harmon_sum2 <- function(x, n =1){
if( x<= 0){
return(n-1)
}
else {
x <- (x- (1/(n)))
harmon_sum2(x, n+1)
}
}
这会返回错误的答案。 我宁愿找到一个只有一个变量 (x) 的解决方案,而不是使用两个变量 (x, n),但我想不出办法。
【问题讨论】: