首页 > 编程知识 正文

汉诺塔c语言递归,汉诺塔c语言程序

时间:2023-05-06 09:15:37 阅读:194900 作者:3294

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

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

我当时的想法是,把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,因为他们的关心给了我很大压力。但是没办法,除非退学。最后休学一学期硬着头皮重新学了一年,终于是慢慢的开始对计算机感兴趣一丢丢了~渐渐的,发现原来一个问题有那么多解法,原来翻个外网这么简单,原来人工智能和心理学还有关~诸如此类颇多,虽然我还是班里最差的一批人,但是我一直在努力,一直在进步。今天把pcdhd做出来之后,我才发现,原来之前一直是自己在吓唬自己,一看到题目就害怕根本不是题目太难,而是我没有“真正”地去面对过,每天哭丧着脸说我不行,因为我不喜欢,给自己找了那么多借口。现在我一定要继续加油,也许哪一天,我可以骄傲地对着计算机说嘿,我的含蓄的草丛你好啊。

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

#include<stdio.h>

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

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

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


return 0;
}
我要做一个优秀的结实的心情,加油!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。