递归
时间复杂度O(N);空间复杂度O(N);
在方法里调用方法
四个要素
1.接受的参数
2.返回的值
3.终止的条件
4.递归的拆解:如何递归下一层(循环的改变量)
力扣 509 斐波那契数列
f(n) = f(n-1) + f(n-2) 当n>=2;
0,1,1,2,3,5,8…
fuction(int n){
if(n<2){
return n==1?1:0;
}
int sum = fuction(n-1)+fuction(n-2)
return sum;
}
力扣 206 反转链表(递归解法)
头节点是head 尾节点即if(head.next==null)
尾节点是终止的条件
head | next | next | next | next | null |
---|---|---|---|---|---|
head | next | next | next | null | |
head | next | next | null | ||
head | next | null | |||
head | null |
第一次:head.next.next=head;
head.next=null;
第n次:head.next.next=head;
head.next=null;
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}
力扣 344 返回字符串
两个指针,每次左指针和右指针互换,每次交换左右指针移动一次
class Solution {
public void reverseString(char[] s) {
int n = s.length;
for (int left = 0, right = n - 1; left < right; ++left, --right) {
char tmp = s[left];
s[left] = s[right];
s[right] = tmp;
}
}
}