关于递归的一些问题

时间:2016-03-18 01:40:39

标签: java recursion

什么是直接递归?什么是无限递归?

什么是基本案例,为什么有必要/重要?

示例代码:

public static void indifferent(int x, int y) {

    if (x <= y) {// base case
        System.out.print("!");
    }else {
        System.out.print(x);

        indifferent(x - 1, y + 2);

        System.out.print(y);
    }
}

3 个答案:

答案 0 :(得分:2)

直接递归:方法调用自身。

间接递归:方法调用其他一些方法,在多次调用之后,调用返回到再次调用第一个调用方法的情况。

基本情况:它是任何递归函数的重要组成部分。递归方法的一个条件是停止调用自身,从而结束递归,即在递归中停止更深入。基本上,如果你认为递归是一个yoyo,那么当递归处于极端时它就是基本情况。

无限递归:这是一个永不结束的递归。基本上它是一个递归函数,没有基本情况。 (溜溜球不会回来,到处都是。)

在此link

查看这些有趣的递归图像

答案 1 :(得分:2)

  1. 直接递归是指方法调用自身时(如示例代码中所示)。间接递归是指方法a()调用方法b(),方法a()本身(直接或间接)再次调用方法@RequestMapping(value = "/{id}/definitions", method = RequestMethod.PUT) public void update(@PathVariable(value = "id") String id, HttpServletRequest iRequest) throws Exception { String decryptedId = //decrypt here //Do whatever else //either forward: or redirect: return "forward:my-service-2/" + decryptedId + "/definitions"; }
  2. 无限递归是永不结束的递归。另一种表达方式是无限递归是指基本情况不存在或从未遇到过。
  3. 基本情况是一组参数值,它们导致方法在没有递归调用(直接或间接)的情况下返回。

答案 2 :(得分:1)

这是一个爬楼梯的算法

public class Project
    {
        public Project { 
            Members = new HashSet<ProjectMember>(); 
        }
        public Guid Id { get; set; }
        public string Name { get; set; }
        public virtual ICollection<ProjectMember> Members { get; set; }
    }

    public class ProjectMember
    {
        public Guid ProjectId { get; set; }
        public virtual Project Project { get; set; }

        public Guid CityId { get; set; }
        public virtual City City { get; set; }
    }

这表明你直接递归(爬升是一步爬升)和基本情况(如果你在顶部则停止)。

两种无限递归的情况:

climb:
    if you are at the top
        stop
    otherwise 
        step up and then climb

第一个没有基本情况,第二个永远不会达到基本情况:

最后,间接递归:

climb:
    step up and then climb

climb:
    if you are at the top
        stop
    otherwise 
        step up and then step down and then climb