这是一次递归吗?

时间:2017-07-01 12:10:02

标签: java recursion iteration

我与朋友争吵,因为我不认为<div class="row clearfix"> <div class="vertical">a</div> // vertical class first <div class="horizontal">b</div> </div> <div class="row clearfix"> <div class="horizontal">c</div> // horizontal class first <div class="vertical">d</div> </div> <div class="row clearfix"> <div class="vertical">f</div> // vertical class first <div class="horizontal">g</div> </div> 是递归,但他说这是因为它自称。 我不认为这是因为一个fib_2()没有返回结果用作另一个fib_2()的参数。 我认为fib_2()fib_2()相同,它是迭代,而不是递归。

这是一个递归还是没有?

fib_3()

3 个答案:

答案 0 :(得分:5)

fff不是递归的,因为它不会调用自身。它调用具有递归实现的fib_2,但仅使fff方法递归是不够的。

另一方面,

fib_2是教科书递归的:它有count == n的基本案例,它有一个递归分支,用新值{{fib_2调用a 1}},bc

答案 1 :(得分:2)

fib_2是递归的。 fff不是。

第一次调用fib_2使用返回(因此&#39;使用&#39;)第二次调用的结果。

或正式:

递归由两个属性定义:

  1. 一个简单的基本案例(或案例) - 一个不使用递归来产生答案的终止场景
  2. 一组规则,将所有其他案例减少到基本案例
  3. 你的如果在fib_2内部履行了第一个属性。 对fib_2的调用实现了第二次。

    fib_3 是一个迭代。

    fib_2 等于fib_3! 当且仅当它们为每个给定输入产生相同的输出时,两个函数是相等的(以数学方式)! fib_2和fib_3具有不同的参数,因此这不是真的。

    fib_3可能等于fff和/或fib_1

    为了以计算机科学的方式实现平等,你必须考虑副作用等问题。

答案 2 :(得分:1)

public static int fib_2(int a, int b, int n, int c, int count) {
        if (count == n) {
            return c;
        }
        int tmp = b;
        b = a + b;
        a = tmp;
        c = b;
        ++count;
        return fib_2(a, b, n, c, count);
    }

我认为在这段代码中正在发生冲击。