1. 逆序打印字符串

    void printReverseString(const char* str){
        if(*str == '\0'){
            return;
        }
        printReverseString(str + 1);
        printf("%c", *str);
    }
    
    int main()
    {
        const char* str = "Hello World";
        printReverseString(str);            // dlroW olleH
    
        return 0;
    }
    
  2. 逆序输出链表

    struct LinkNode{
        int data;
        struct LinkNode* next;
    };
    
    void printReverseLinkNode(struct LinkNode* header){
        if(header == NULL){
            return;
        }
        printReverseLinkNode(header->next);
        printf("%d\n", header->data);
    }
    
    int main()
    {
        struct LinkNode* header = malloc(sizeof(struct LinkNode));
        struct LinkNode* node1 = malloc(sizeof(struct LinkNode));
        node1->data = 10;
        node1->next = NULL;
        struct LinkNode* node2 = malloc(sizeof(struct LinkNode));
        node2->data = 20;
        node2->next = NULL;
        struct LinkNode* node3 = malloc(sizeof(struct LinkNode));
        node3->data = 30;
        node3->next = NULL;
        header->next = node1;
        node1->next = node2;
        node2->next = node3;
        printReverseLinkNode(header->next);
    
        return 0;
    }
    
  3. 递归实现给出一个数 8793,依次打印千位数 8、百位数 7、十位数 9、个位数 3

    void printNum(int num){
        if(num == 0){
            return;
        }
        int val = num / 10;
        printNum(val);
        printf("%d ", num % 10);
    }
    
    int main()
    {
        int num = 8973;
        printNum(num);      // 8 9 7 3
    
        return 0;
    }
    
  4. 阶乘

    int factorial(int n){
        if(n <= 1){
            return 1;
        }
        else{
            return n * factorial(n-1);
        }
    }
    
  5. 斐波那契数列

    int fibonacci(int n){
        if(n == 0) return 0;
        if(n == 1) return 1;
        return fibonacci(n-1) + fibonacci(n-2);
    }
    
  6. 河内塔(递归树的中序遍历)

    void move(char X, char Y){
        cout << "move " << X << " to " << Y << endl;
    }
    void hanoi(int n, char X, char Y, char Z){
        if(n <= 1){
            move (X, Z);
        }
        else{       
            hanoi(n-1, X, Z, Y);    // X 上最大的环不动,其他 n-1 个环移动到 Y
            move(X, Z);             // 移动最大的环到 Z,放好
            hanoi(n-1, Y, X, Z);    // 把 Y 上的 n-1 个环移动到 Z
        }
    }
    

    河内塔.jpg