棘手的递归功能

ken*_*nns 0 c# recursion

public class look
{
    public int takeALook (int a)
    {
        if (a == 1)
            return 1;
        else if (a == 0)
            return 0;
        else
            return takeALook(a-2) + takeALook(a-1);

    }
}
Run Code Online (Sandbox Code Playgroud)

主程序,

int a = 6;

look lk = new look();

int r = lk.takeALook(a);

Console.WriteLine("r is" + r);
Run Code Online (Sandbox Code Playgroud)

答案是8.但任何人都可以解释原因吗?令我困惑的是因为它自称是2倍.

Joh*_*ica 6

takeALook(0) == 0
takeALook(1) == 1
takeALook(2) == takeALook(0) + takeALook(1) == 0 + 1 == 1
takeALook(3) == takeALook(1) + takeALook(2) == 1 + 1 == 2
takeALook(4) == takeALook(2) + takeALook(3) == 1 + 2 == 3
takeALook(5) == takeALook(3) + takeALook(4) == 2 + 3 == 5
takeALook(6) == takeALook(4) + takeALook(5) == 3 + 5 == 8
Run Code Online (Sandbox Code Playgroud)