1.递归是在函数里调用自己。后面相应的汉诺塔问题思路是将很多个汉诺塔一步步分解为一个汉诺塔问题。记得以前写都是找规律.....之后再用分治写一下hduoj上的汉诺塔吧,先挖个坑。
首先先推导一遍经典汉诺塔的公式。
有n个圆盘要从A到C。思路是先将(n-1)个圆盘移动到B,再把第n个圆盘移动到C。步骤是1+F(n-1).所以f(n)=2f(n-1)+1.f(n)+1=2[f(n-1)+1],s(n)=2s(n-1).
f(1)=1所以s(n)=2^n,f(n)=2^n-1.

#include<stdio.h>
using namespace std;
int n,a,b,c,ans;
int move(int n,int start,int transfer,int end)
{
    if(n==1) return 1;
    else
    {
        ans=2*move(n-1,transfer,start,end)+1;
        return ans;
    }
}
int main()
{
    int n,m;
    while(~scanf("%d",&n))
    {
        m=move(n,a,b,c);
    printf("%d\n",m);
     }
} 

二叉树定义就是每个根节点的最大子节点为2。满二叉树是最后一层没有子节点,其他都有两个子节点。完全二叉树定义是在满二叉树的最后一层的右边没有节点。
前中后序遍历二叉树:该三种遍历方法都是以根节点所在的位置进行命名的。顺序是:前:根-前-后。中:前-根-后。后:前-后-根。
需要注意的是每种遍历方法都要把该节点的左子树遍历完全才能遍历下他的右子树。
EG:前序遍历是ABCDFE,中序遍历是BADFCE。求后序。
由前序得A必定是根节点,且中序只有B在A的左边,因此a的左子树只有一个b。
再根据前序第三个元素得到c是a右子树的第一个子节点。以此类推得到后序就是BFDECA。

代码实现以上过程。

排序。冒泡选择插入排序太简单了,就不讲了,平时也很少用。