经典的递归问题:汉诺塔

上代码:

#include <stdio.h>
#include <stdlib.h>
int time=0;
void move(int n,char start,char transfer,char objective){
    time++;
    if (n==1){
       printf("%c-->%c\n",start,objective);
    }
    else
    {
     move(n-1,start,objective,transfer);
     printf("%c-->%c\n",start,objective);
     move(n-1,transfer,start,objective);
    }
}
tesksample(int q){
   printf("%d层的汉诺塔:\n移动情况:\n",q); 
   move(q,'a','b','c');
   printf("一共移动了%d次",time);
   time=0;
}
int main(){
    tesksample(3);
    return 0;
}

运行结果:

总结:

汉诺塔问题被称为智商的分界线,也不是没有道理,理解不到的感觉难如登天,理解到了就会感觉很简单。本问题的关键在于理解到三个杆在不断的递归中其充当的角色(起始杆,中转杆,目的杆)也在不断改变。

详细可以参考一下:BV13g41157wn

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐