计算 fib(n) 被调用 FOR EACH n 的次数
Computing the number of times fib(n) is called FOR EACH n
我想计算 fib(n) 被调用 FOR EACH n 的次数。我写的代码如下:
#include <stdio.h>
#define N 10
int count[N + 1]; // count[n] keeps track of the number of times each fib(n) is called
int fib(int n) {
count[n]++;
if(n <= 1)
return n;
else
return fib(n - 1) + fib(n - 2);
}
int main() {
for(int i = 0; i <= N; i++) {
count[i] = 0; // initialize count to 0
}
fib(N);
// print values of count[]
for(int i = 0; i <= N; i++) {
printf("count[%d] = %d", i, count[i]);
}
}
我已经尝试打印数组 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
有没有办法从数学上显示这个结果,也许是递归公式?另外,为什么 count[0] 或者 fib(0) 不继续斐波那契数列? 谢谢。
因为 count[1]
会被每个 count[2] + count[3]
调用,但是 count[0]
只会被 count[2]
调用...count[1]
不会贡献是因为它是一个终点站。
至于数学公式:
if n == 0: fib(N - 1)
else: fib(N-(n-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
我想计算 fib(n) 被调用 FOR EACH n 的次数。我写的代码如下:
#include <stdio.h>
#define N 10
int count[N + 1]; // count[n] keeps track of the number of times each fib(n) is called
int fib(int n) {
count[n]++;
if(n <= 1)
return n;
else
return fib(n - 1) + fib(n - 2);
}
int main() {
for(int i = 0; i <= N; i++) {
count[i] = 0; // initialize count to 0
}
fib(N);
// print values of count[]
for(int i = 0; i <= N; i++) {
printf("count[%d] = %d", i, count[i]);
}
}
我已经尝试打印数组 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
有没有办法从数学上显示这个结果,也许是递归公式?另外,为什么 count[0] 或者 fib(0) 不继续斐波那契数列? 谢谢。
因为 count[1]
会被每个 count[2] + count[3]
调用,但是 count[0]
只会被 count[2]
调用...count[1]
不会贡献是因为它是一个终点站。
至于数学公式:
if n == 0: fib(N - 1)
else: fib(N-(n-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