递归:一次返回
Recursion: double call in one return
int f(int n){
if (n==0 || n==1)
return 1;
else
return 2*f(n-1)+2*f(n-2);
}
如果n = 3,您如何看待步骤?如果只有一个" 2*f(n-1)",我会知道如何思考,但是有两个电话。谢谢!
Qed
n = 3
的呼叫图,应像:
=> 2*f(2)+2*f(1);
=> 2*[2*f(1)+2*f(0)] + 2*f(1)
=> 2*[2*1 + 2*1] + 2*f(1)
=> 8 + 2*1
=> 10
如果您以每个步骤的一个操作转动此操作,则可以得到类似的东西:
int f(int n){
return fcont1(n, n < 2);
}
int fcont1(int n, int nl2) {
if( nl2 ) {
return n;
} else {
return fcont2(n);
}
}
int fcont2(int nm1){
return fcont3(n, n-1);
}
int fcont3(int n, int nm1){
return fcont4(n, f(nm1));
}
int fcont4(int n, int r1){
return fcont5(r1, n-2);
}
int fcont5(int r1, int nm2){
return fcont6(r1, f(nm2));
}
int fcont6(int r1, int r2) {
return fcont7(2*r1, r2);
}
int fcont7(int dr1, int r2) {
return fcont7(dr1, 2*r2);
}
int fcont7(int dr1, int dr2) {
return dr1+dr2;
}
coruse此重写最终会使用更多内存,因为C不优化尾巴调用,但是任何执行此操作的语言与确定操作的顺序完全相同。
相关文章:
- 我是否需要在下一次转移时将所有权*转移回转移队列
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 在C++中一次将矢量值写入多个文件
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么 zlib 放气初始化调用一次不起作用?
- 在一次迭代中从 txt 文件中读取多行
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 从子菜单返回后,正确的输入至少进入验证循环一次
- 如何在返回一次数据后从类实例中删除数据
- 递归:一次返回
- C++不止一次返回
- 如何使用C++单一实例返回仅初始化一次的对象
- C++重载getter两次,一次返回指针,另一次返回常量引用,都失败了
- 如何在c++中一次又一次地从函数返回
- 如何使用数据类型的一次返回来返回错误
- 如何写函数整洁?考虑到log,一次返回,不再缩进
- 为什么popn()一次又一次调用返回相同的输出
- Std::istringstream.good()比预期多返回一次true
- "Peek ahead"检查下一次对getline(file,line)的调用是否会返回false - 而不实际调用它,即不消耗该行
- C++跟踪一个项目一次,然后返回