JAVA巨精简递归小谈>__<

递归算法十分重要,它的主要思想就是将重复的大问题化为单个最小问题,通过调用自身函数来解决,主要有两个过程:“递”与“归”,以及递归的终止条件。

例1:

LeetCode206

1 public static ListNode reverseList(ListNode head) {
2        if(head==null||head.next==null){    //递归终止条件
3            return head;
4        }
5        ListNode next=head.next;        //向后走操作
6        ListNode newHead=reverseList(next);    //递归入口
7        next.next=head;                  //逐步反转
8        head.next=null;
9        return newHead;
2 if(head==null||head.next==null){
3            return head;
4        }
5        ListNode next=head.next;
6        ListNode newHead=reverseList(next);

程序开始时,从if进,不符合其中的条件,继续向下到第五行next=next.next,使得结点在链表中向后走,直到第6行;第6行开始调用自身(即为"递"的过程),

 if(head==null||head.next==null){    //递归的终止条件
            return head;            //开始"归"的过程
        }

接下来开始执行7到9行,直到"归"到 第一次调用时

 每一次"归"的过程都会执行7、8行代码,即进行反转操作,直到"归"到第一次调用时,"递归整体结束,链表也反转完毕" ,再返回新的头结点,至此该算法整个执行完。

例2:

杨辉三角

//该算法是基于将杨辉三角分割为一半编写的
1  public static int getV(int x,int y){
2        if(y<=x&&y>=0){
3            if(y==0||x==y){    //"递"的终止条件
4                return 1;    //"归"的开始
5            }
6            else {
7                return getV(x-1,y-1)+getV(x-1,y);    //"递"的入口
8            }
9        }
10        return -1;            //失败则返回-1
11    }

可以将此三角型看作一个数字矩阵:

 

若查找的值在对角线直接返回1,否则进行第7行,开始"递",当满足条件时,开始"归",直到回到第一次调用。

 

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值