我的理解,在方法中调用方法本身的一种算法,需要有结束递归的条件,也切记勿递归太深,导致抛出“栈溢出异常”
第一题,斐波那契数,力扣509
满足关系式F(n)=F(n-1)+F(n-2)
,使用递归算法
public static int F(int n){
if (n==1 || n==0){
return n;
}
return F(n-1)+F(n-2);
}
第二题,反转链表,力扣206题
观察此图
从倒数第二个看,(把红色方框当做一个整体)
那么满足关系式,
public ListNode reverseList(ListNode head){
// 递归结束条件
if(head == null || head.next = null){
return head;
}
ListNode newHead = reverseList(head.next);
head.next,next = head;
head.next = null;
return newHead;
}
第三题,反转字符串,力扣344题
char temp = 0;
public void reverse(char[]s,int left,int right){
if(left >= right){
return;
}
temp = s[left];
s[left] = s[right];
s[right] = temp;
reverse(s,left+1,right-1)
}
第四题,最长同值路径,力扣687
class Solution {
int ans;
public int longestUnivaluePath(TreeNode root) {
ans = 0;
longestPath(root);
return ans;
}
public int longestPath(TreeNode node) {
if (node == null) return 0;
int maxLorRres=0;
int left = longestPath(node.left);
int right = longestPath(node.right);
if (node.left != null && node.left.val == node.val&&node.right != null && node.right.val == node.val) {
ans=Math.max(ans, left + right+2);
}
if(node.left!=null&&node.left.val == node.val){
maxLorRres=left+1;
}
if(node.right!=null&&node.right.val==node.val){
maxLorRres=Math.max(maxLorRres,right+1);
}
ans=Math.max(ans,maxLorRres);
return maxLorRres;
}
}