您的位置:首页 > 其它

【蓝桥杯-递归优化】汉诺塔问题的优化

2018-02-18 18:24 204 查看
#include<iostream>
#include<bits/stdc++.h>
using namespace std;

long long cishu=0,tili=0;

void yidong(int n)
{
if(n==1)
{
cishu+=1;
tili+=1;
}
else
{
yidong(n-1);
cishu=cishu*2+1;
tili=tili*2+n;
//yidong(n-1);   因为两次递归都是一样的,所以可以省略一次递归,大大节约运行时间。
}
}

int main()
{
int N;
cin>>N;
yidong(N);
cout<<cishu<<" "<<tili;
return 0;
}
节约的那次递归,只需要对次数和消耗的体力进行加倍即可,注意还要增加考虑上最后一次直接搬最大的那第n块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: