R中的递归算法导致无限递归
我试图在R中实现下面的python函数。这里的主函数是在函数中调用的 俄罗斯农民算法的递归版本 函数的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
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))
}
}