计算 fib(n) 的次数称为 FOR EACH n
Computing the number of times fib(n) is called FOR EACH n
我想计算fib(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]:
计数[0] = 34 计数[1] = 55 计数[2] = 34 计数[3] =21 计数[4] = 13 计数[5] = 8 计数[6] = 5 计数[7] = 3 计数[8] = 2 计数[9] = 1 计数[10] = 1
有没有办法在数学上显示这个结果,也许是一个递归公式?另外,为什么不算[0],或者更确切地说是fib(0),不继续斐波那契数列?谢谢。
因为每个count[2] + count[3]
都会调用count[1]
,但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
相关文章:
- C++ 中用于二维数组的 for-each 循环
- 计算 fib(n) 的次数称为 FOR EACH n
- 支持自定义 const 本机C++容器类的"for each"
- C++ for-each 语句触发"vector iterators incompatible"断言失败:this->_Getcont() == 0
- 为什么我的矢量中的项目在 C++ 中的 for-each 循环期间不会改变?
- 当循环返回"for each"项的 nullptr 时?
- 正确使用C++ 'for each'选项
- "for each"能保证使用更改数组吗?
- 基于范围的循环与 for-each 循环有何不同
- C++:从"for each"循环中的映射中删除值
- 将函数应用于std::map值,其中包含for each和lambda函数
- 正在擦除for(-each)自动循环中的项目
- g++ 4.4.7 -std=gnu++0x 应该编译"for each"结构吗?
- 将循环转移到C++03 for each
- 在 for-each 循环中使用 'auto' 时是否需要添加'const'?
- C++中的"for each"循环如何知道数组的长度
- 基本c++: for-each循环
- 如何使c++中的for each循环函数与自定义类一起工作
- 如何使用for-each循环来美化析构函数
- for-each 循环生成错误,但 for(it=begin()...在遍历 std::map 包含 unique_ptr 时不会