算法递归

算法02_递归

递归的三大要素

  • 第一要素:明确函数要干什么
  • 第二要素:寻找递归结束条件
  • 第三要素:找出函数的等价关系式

阶乘

//1明确函数要干什么,计算n的阶乘

//2寻找递归结束条件
//当n=1时,返回1

//3找出函数的等级关系式
//即f(n) = f(n-1)*n;

int f(int n){
     
    if(n==1)
        return 1;
    return f(n-1)*n;
}

更多的例子

斐波那契数列

int f(int n){
     
    if(x<=2){
     
        return 1;
    }
    return f(n-1) f(n-2); 
}

小青蛙跳台阶

小青蛙一次可以跳上1个台阶,也可以跳上2个台阶,求该青蛙跳上一个n阶的台阶有多少种跳法?

/*
每次跳的时候,小青蛙可以跳一个台阶,也可以跳两个台阶,也就是说,每次跳的时候,小青蛙有两种跳法。

第一种跳法:第一次我跳了一个台阶,那么还剩下n-1个台阶还没跳,剩下的n-1个台阶的跳法有f(n-1)种。

第二种跳法:第一次跳了两个台阶,那么还剩下n-2个台阶还没,剩下的n-2个台阶的跳法有f(n-2)种。
*/
int f(int n){
     
    if(n<=2){
     
        return n;
    }
    return f(n-1) f(n-2);
}

翻转单链表

1->2->3->4 翻转成为 4->3->2->1

/*
class Node{
	int date;
	Node next;
}
*/
void f(head){
     
    if(head==null||head.next==null){
     
        return head;
    }
    Node newNode = f(head.next);
    NOde t1 = head.next;
    t1.next = head;
    head.next = null;
    return newNode;
}

递归的一些的优化

  • 考虑是否重复计算

    使用一个哈希表来保存计算过的值

  • 考虑是否可以自顶向上

    简而言之递推

参考文章:https://mp.weixin.qq.com/s/mJ_jZZoak7uhItNgnfmZvQ

你可能感兴趣的:(算法入门,java,算法)