R中的递归算法导致无限递归

R中的递归算法导致无限递归,r,R,我试图在R中实现下面的python函数。这里的主函数是在函数中调用的 俄罗斯农民算法的递归版本 函数的R表示 rec_俄语rec_俄语我想你是在尝试: rec_russian <- function( a , b ){ if( a == 0 ){ return(0) } else if (a %% 2 == 0) { return( 2*rec_russian(a/2,b) ) } else { return( b + 2*rec_russian

我试图在R中实现下面的python函数。这里的主函数是在函数中调用的

俄罗斯农民算法的递归版本 函数的R表示
rec_俄语
rec_俄语我想你是在尝试:

rec_russian <- function( a , b ){
  if( a == 0 ){
    return(0)
    } else if (a %% 2 == 0) {
    return( 2*rec_russian(a/2,b) )
    } else {
    return( b + 2*rec_russian((a-1)/2,b))
    }
}
rec_russian(3,4)
# 12

我认为你正在努力做到:

rec_russian <- function( a , b ){
  if( a == 0 ){
    return(0)
    } else if (a %% 2 == 0) {
    return( 2*rec_russian(a/2,b) )
    } else {
    return( b + 2*rec_russian((a-1)/2,b))
    }
}
rec_russian(3,4)
# 12

非常感谢你的回答。非常详细!非常感谢你的回答。非常详细!非常感谢你的回答!我从来没有像你那样使用“如果”语句。因此,从你的答案中学习是很好的。但我认为李的回答是正确的,因为他详细说明了我犯错误的地方。再次感谢您的回复。我的代码是手头python代码的直接翻译。您可以在不使用else的情况下使用if语句,我在本例中就是这样做的。在这里这样做是有意义的,因为
return
终止函数,如果满足任何if条件,函数将在此处停止,因此您可以省略
,否则
将非常感谢您的回答!我从来没有像你那样使用“如果”语句。因此,从你的答案中学习是很好的。但我认为李的回答是正确的,因为他详细说明了我犯错误的地方。再次感谢您的回复。我的代码是手头python代码的直接翻译。您可以在不使用else的情况下使用if语句,我在本例中就是这样做的。在这里这样做是有意义的,因为
return
终止函数,如果满足任何if条件,函数将在此处停止,因此您可以省略
else
s
Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
Error during wrapup: evaluation nested too deeply: infinite recursion / options(expressions=)?
rec_russian <- function( a , b ){

   if( a == 0 ) return(0)

   if (a %% 2 == 0) return ( 2*rec_russian(a/2,b) )

   return ( b + 2*rec_russian((a-1)/2,b))
}
rec_russian(3,4)
rec_russian <- function( a , b ){
  if( a == 0 ){
    return(0)
    } else if (a %% 2 == 0) {
    return( 2*rec_russian(a/2,b) )
    } else {
    return( b + 2*rec_russian((a-1)/2,b))
    }
}
rec_russian(3,4)
# 12
rec_russian <- function( a , b ){
  if( a == 0 ){
    return(0)
    }
  else if (a %% 2 == 0) {
    return( 2*rec_russian(a/2,b) )
    }
  else {
    return( b + 2*rec_russian((a-1)/2,b))
    }
}