递归

点击这里查看配套的教学视频

点击跳转到算法课程所有目录

1 leetcode 21. 合并两个有序链表

合并过程如下:

1 --> 3 --> 5
2 --> 4 --> 6

1 --> ( 3 --> 5
        2 --> 4 --> 6 )
1 --> 2 --> ( 3 --> 5
              4 --> 6 )
1 --> 2 --> 3 --> ( 5
                    4 --> 6 )
1 --> 2 --> 3 --> 4 --> ( 5
                          6 )
1 --> 2 --> 3 --> 4 --> 5 --> ( 6 )
1 --> 2 --> 3 --> 4 --> 5 --> 6

c语言实现:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
    if (!list1)
        return list2;
    if (!list2)
        return list1;
    if (list1->val < list2->val) {
        list1->next = mergeTwoLists(list1->next, list2);
        return list1;
    } else {
        list2->next = mergeTwoLists(list1, list2->next);
        return list2;
    }
}

2 leetcode 509. 斐波那契数

c语言实现:

int fib(int n) {
    if (n == 0)
        return 0;
    if (n == 1)
        return 1;
    return fib(n - 1) + fib(n - 2);
}