九连环-递归解法

//求取下n环和放上n环的步数

int
ans; //规则一:第一环可以在任何时候放上或取下环柄。 //规则二:只有紧跟在领头环后的环可以放上或取下环柄。(领头环是套在柄上的最前面的环 int DownRing(int); int UpRing(int); int DownRing(int n) { int res = 0; if(n == 1) return 1; if(n>2) res = (res + DownRing(n-2))%SMod; //移下n-2个,第n-1个变为领头环 res += 1; //移下第n个 if(n>2) res = (res + UpRing(n-2))%SMod; //将n-2个移上去,以便移下第n-1个 if(n>1) res = (res + DownRing(n-1))%SMod; //此时就变成了将n-1个移下去了 return res; } int UpRing(int n) { int res = 0; if(n == 1) return 1; if(n>1) res = (res + UpRing(n-1))%SMod; //移上n-1个 if(n>2) res = (res + DownRing(n-2))%SMod; //将n-2个移下,此时第n-1个变成领头环 res += 1; //移上第n个 if(n>2) res = (res + UpRing(n-2))%SMod; //将n-2个环移上去 return res; } int main() { int n; while(scanf("%d",&n)!=EOF) printf("%d\n",DownRing(n)); return 0; }

 

转载于:https://www.cnblogs.com/whatbeg/p/3900028.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值