zhou1_20 发表于 2016-1-27 12:13 
你这种方法算出结果有问题, 当 wine=5 时可以算得正常结果为15,而你的方法是11
原程序确实有些问题,丢掉了一些未能整换的”零头“,下面进行了修正:
#拥有的酒(以瓶计,不包括瓶盖和瓶身,只代表酒)
liquor <- 0;
#递归函数,输入变量为酒瓶数(包含瓶盖、瓶身)
exchange <- function(wine,bottle,cap){
liquor <<- liquor + wine;
tmpBottle <- floor((wine+bottle)*0.5)
tmpCap <- floor((wine+cap)*0.25)
addedLiquor = tmpBottle + tmpCap;
remainingBottle <- (wine+bottle) - tmpBottle*2;
remainingCap <- (wine+cap) - tmpCap*4;
cat("now own liquor number:",liquor,", addedLiquor number:",addedLiquor,"\n");
if(addedLiquor>=1){
exchange(addedLiquor,remainingBottle,remainingCap);
}
}
#赋初始值,并计算
wine <- 100;
exchange(wine,0,0);
#打印结果
cat("total liquor number:" ,liquor,"\n");
运行结果为:
now own liquor number: 100 , addedLiquor number: 75
now own liquor number: 175 , addedLiquor number: 55
now own liquor number: 230 , addedLiquor number: 42
now own liquor number: 272 , addedLiquor number: 32
now own liquor number: 304 , addedLiquor number: 24
now own liquor number: 328 , addedLiquor number: 18
now own liquor number: 346 , addedLiquor number: 13
now own liquor number: 359 , addedLiquor number: 9
now own liquor number: 368 , addedLiquor number: 8
now own liquor number: 376 , addedLiquor number: 6
now own liquor number: 382 , addedLiquor number: 4
now own liquor number: 386 , addedLiquor number: 3
now own liquor number: 389 , addedLiquor number: 2
now own liquor number: 391 , addedLiquor number: 1
now own liquor number: 392 , addedLiquor number: 2
now own liquor number: 394 , addedLiquor number: 1
now own liquor number: 395 , addedLiquor number: 0
total liquor number: 395