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

xiaoxiao2021-02-28  21

#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块。

转载请注明原文地址: https://www.6miu.com/read-2624821.html

最新回复(0)