我想计算每次调用fib(n)的次数。我编写了如下代码:
Random random = new Random();
int[,] array = new int[10, 10];
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
array[i, j] = random.Next(10);
Console.Write(array[i,j]+"\t");
}
Console.WriteLine("\n");
我已经尝试打印数组count []来获得结果,其中结果类似于斐波那契数字,除了count [0]:
count [0] = 34 count [1] = 55 count [2] = 34 count [3] = 21 count [4] = 13 count [5] = 8 count [6] = 5 count [7] = 3 count [8] = 2 count [9] = 1 count [10] = 1
有没有办法以数学方式显示此结果,可能是一个递归公式?另外,为什么不计算[0],或者更确切地说是fib(0),不会继续斐波那契序列?谢谢。
答案 0 :(得分:5)
因为每个count[1]
都会调用count[2] + count[3]
,但count[0]
只会调用count[2]
... count[1]
不会{39}因为它是一个终点而有所贡献。
至于数学公式:
if n == 0: fib(N - 1)
else: fib(N-(n-1))
答案 1 :(得分:1)
至于计算
call(n)=call(n-1)+call(n-2)+1
call(1)=1
call(0)=1
希望这能让事情变得清晰。
n | calls
---+--------
0 | 1
1 | 1
2 | 3
3 | 5 f(3)= f(2)[= f(1)+ f(0)]+ f(1)
5 | 9
.
fib(n) 2*fib(n)-1