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

#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://blog.csdn.net/m0_38033475/article/details/79335112
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞