HDU2042

题目出自杭电
HDU2042_第1张图片

#include <stdio.h>
#include <stdlib.h>
int f(int m)
{
    if(m==1)
        return 4;
    else
        return (f(m-1)-1)*2;
}
int main()
{
    int n,m;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&m);
        printf("%d\n",f(m));
    }

    return 0;
}

思路:递归:自己调用自己
递归的基本思想:把规模大的问题转化为规模小的相似的子问题来解决
使用递归需要
1有反复执行的过程(调用自身)
2有跳出反复执行过程的条件(递归出口)
使用递归的缺点
1递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。
2在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出。因此一般不提倡用递归算法设计程序。
经典案例
①斐波纳契数列(Fibonacci Sequence)
详看:http://blog.csdn.net/joeycom2/article/details/51095887
②n的阶乘

#include <stdio.h>
#include <stdlib.h>
int f(int m)
{
    if(m==1)
        return 1;
    else
        return f(m-1)*m;
}
int main()
{
    int n,m;
    while(~scanf("%d",&n))
    {
        while(n--)
        {
            scanf("%d",&m);
            printf("%d\n",f(m));
        }
    }
    return 0;
}

③列出某个目录下所有的子目录和文件
详看: http://bbs.csdn.net/topics/390153108
造诣还不够@。@还没看懂,先记着以后看吧T_T

④汉诺塔问题
HDU2042_第2张图片
问题描述: 有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动,设移动次数为H(n)。
解决汉诺塔问题的思路:
如果只有一个金片,则把该金片从源移动到目标棒,结束。
如果有n个金片,则把前n-1个金片移动到辅助的棒,然后把自己移动到目标棒,最后再把前n-1个移动到目标棒。
对于汉诺塔问题的求解,可以通过以下三个步骤实现:
将塔A上的n-1个碟子借助塔C先移到塔B上。
把塔A上剩下的一个碟子移到塔C上。
将n-1个碟子从塔B借助塔A移到塔C上。
贴上视频:http://v.youku.com/v_show/id_XMzgzOTEzNjMy.html
上代码:

#include <stdio.h>
//第一个塔为初始塔,中间的塔为借用塔,最后一个塔为目标塔
int i=1;//记录步数
void move(int n,char from,char to) //将编号为n的盘子由from移动到to
{
    printf("第%d步:将%d号盘子%c---->%c\n",i++,n,from,to);
}
void hanoi(int n,char from,char denpend_on,char to)//将n个盘子由初始塔移动到目标塔(利用借用塔)
{
    if (n==1)
    move(1,from,to);//只有一个盘子是直接将初塔上的盘子移动到目的地
    else
    {
      hanoi(n-1,from,to,denpend_on);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上
      move(n,from,to);              //将剩下的一个盘子移动到目的塔上
      hanoi(n-1,denpend_on,from,to);//最后将借用塔上的n-1个盘子移动到目的塔上
    }
}
void main()
{
     printf("请输入盘子的个数:\n");
     int n;
     scanf("%d",&n);
     char x='A',y='B',z='C';
     printf("盘子移动情况如下:\n");
     hanoi(n,x,y,z);
}

后面 的递归参考自http://blog.csdn.net/wangjinyu501/article/details/8248492

你可能感兴趣的:(HDU2042)