汉诺塔C语言

如果有我的同学也看到这篇文章大概会感到惊讶和好笑了,因为这是大一上就做过的一道题。

当时刚学了递归,最简单的一道题就是求n!这个用递归我会做,但是汉诺塔一下子就吓懵了。

我当时的想法是,把n-1块先挪到B上去,然后把第n块挪到C上去,然后把n-1块挪到C上去就大功告成了,在挪n-1时就应该用到的是递归。但是当时死读书,看书里的递归问题范例都是这样的

int f(int n){

if(n==1)

return 1;

else

return n*f(n-1);

}

所以以为递归都必须是

else

return n*f(n-1);这种形式的,没敢想着“递归”真实的含义就是,自己调用自己,而误以为都是自己返回自己,这里的区别是自己返回自己的话,返回后面的代码根本不会被运行,这样就没办法再重新按照刚才的步骤走一遍,所以当时死脑筋没做出来。昨天突然想到这个没解决的问题,刚刚做了才发现,原来是我想的实在太复杂了。

写这篇博客的时候,我特别开心,因为我一直特别讨厌计算机专业,当初也并不想来这个专业,我想去的是医学院,所以在这里学的很痛苦,甚至快得了抑郁症,每天失眠,害怕进实验室,害怕见到同专业同学,因为他们太优秀,害怕TA,因为他们的关心给了我很大压力。但是没办法,除非退学。最后休学一学期硬着头皮重新学了一年,终于是慢慢的开始对计算机感兴趣一丢丢了~渐渐的,发现原来一个问题有那么多解法,原来翻个外网这么简单,原来人工智能和心理学还有关~诸如此类颇多,虽然我还是班里最差的一批人,但是我一直在努力,一直在进步。今天把汉诺塔做出来之后,我才发现,原来之前一直是自己在吓唬自己,一看到题目就害怕根本不是题目太难,而是我没有“真正”地去面对过,每天哭丧着脸说我不行,因为我不喜欢,给自己找了那么多借口。现在我一定要继续加油,也许哪一天,我可以骄傲地对着计算机说嘿,我的男朋友你好啊。

按照下面这样的做法就很轻松做出来了。

#include<stdio.h>

void putWay(int n,char A,char B,char C){
    if(n==1)
        printf("%c->%c\n",A,C);
    else{
        putWay(n-1,A,C,B);
        printf("%c->%c\n",A,C);
        putWay(n-1,B,A,C);
    }
}

int main()
{
    int n;
    scanf("%d",&n);

    putWay(n,'A','B','C');


return 0;
}
我要做一个优秀的程序媛,加油!

  • 34
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值