在c++中使用递归时,如何避免重新初始化变量?
How can I avoid re-initializing a variable when using recursion in c++?
我刚刚开始学习递归,我很困惑如何避免这个问题。我将编写一个需要存储变量的函数,比如sum,但是我必须在函数中声明变量,这样每次递归调用时,变量都会再次初始化。我该如何解决这个问题?我想一个辅助函数的一些短,但我不是很确定。
int fib_tail(int n)
{
int fibResult = 0;
int x = 0; // used for bottom-up approach
if (n == 0) {
return 0;
}
if (n == 1) {
return 1;
}
if (n > 1 && x <= n) {
fibResult += fib(x);
}
++x;
return fib_tail(n);
}
如果您提供您的代码将会有所帮助。但是,通常情况下,您需要传递所需的内容并返回结果。
一个例子:
int Sum(Node* node)
{
if (node == 0)
return 0;
return node->value + Sum(node->next);
}
编辑
在你的例子中,我将这样做:
int fib_tail(int n)
{
if (n <= 0) {
return 0;
}
if (n == 1) {
return 1;
}
return fib_tail(n-1) + fib_tail(n-2);
}
Ide one: http://ideone.com/hS2s38
相关文章:
- 如何在向量列表初始化时避免对象复制以及如何延长临时的生存期
- 轻松日志记录++如何避免多个初始化
- 有没有办法在初始化字符串时避免来自 clang-tidy(fuchsia-default-arguments)的警告?
- 避免在 c++ 向量或 valarray 中进行初始化
- 在类构造函数中初始化映射时,如何避免内存泄漏
- 在对空基类使用聚合初始化时如何避免 {}
- 避免由于标题中的专业初始化而避免重复的符号
- C 如何避免访问尚未初始化的对象的成员
- 我如何避免明确构建C 初始化列表中继承的所有内容
- 如何避免需要在初始化列表中初始化成员对象
- 如何避免两步初始化
- 是否有可能在初始化列表中避免使用static_cast
- 初始化QByTearray避免[-wnarrow]
- 如何避免丢失自动生成的初始化列表构造函数
- 在避免新分配的同时,const变量的复杂初始化
- 优雅地避免了未来C++向量元素的值初始化
- 来自非初始化变量的值从何而来
- 何时使用外部链接初始化全局常量,避免静态初始化顺序惨败
- 在没有 new 关键字的情况下初始化C++对象的内存从何而来
- 如何检测或避免使用未初始化C++指针