这是一次递归吗?

Sab*_*ber -4 java iteration recursion

我与朋友争吵,因为我不认为fib_2()是递归,但他说这是因为它自称.
我不认为这是因为fib_2()没有一个返回结果用作另一个的参数fib_2().我认为fib_2()是相同的fib_3(),它是一个迭代,而不是递归.

那么它是递归还是不是?

public class Demo {
    public static void main(String[] args) {
        System.out.printf("fib_1 -> %d\n", fib_1(10));
        System.out.printf("fib_2 -> %d\n", fff(10));
        System.out.printf("fib_3 -> %d\n", fib_3(10));
    }

    //This is recursion
    public static int fib_1(int n) {
        if (n == 1 || n == 2)
            return 1;
        return fib_1(n - 1) + fib_1(n - 2);
    }

    //Is this recursion or not ?
    public static int fff(int n) {
        int a = 1, b = 1, c = 0, count = 2;
        return fib_2(a, b, n, c, count);
    }

    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);
    }

    public static int fib_3(int n) {
        int a = 1, b = 1;

        for (int i = 2; i < n; i++) {
            int temp = b;
            b = a + b;
            a = temp;
        }
        return b;
    }
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 5

fff不是递归的,因为它不会调用自身.它调用fib_2哪个具有递归实现,但这不足以使该fff方法递归.

fib_2,在另一方面,是教科书递归的:它有一个基本情况count == n,它有一个递归分支调用fib_2与新价值a,bc.