我可以有一个const类型的递归函数吗?const函数可以在C++中递归,只要它修改可变变量?
0
A
回答
6
是的。 const
可以再次调用const
函数。你甚至不需要可变变量,因为它是有意义的,例如你可以通过引用将事物传递给递归函数并修改你的状态。 (或静态变量,或非成员或其他函数返回非const引用或指向非const事物的指针....)
最小“有用”示例(受到flownt对其他答案的评论的启发)遍历链表。 (递归是不是做链表遍历正常不过的好方法)
#include <memory>
#include <iostream>
class Item {
public:
Item(const int& in, Item *next=NULL) : value(in), next(next) {}
void sum(int& result) const {
result += value;
if (next.get())
next->sum(result);
}
private:
int value;
std::auto_ptr<Item> next;
};
int main() {
Item i(5, new Item(10, new Item(20)));
int result = 0;
i.sum(result);
std::cout << result << std::endl;
}
您也可避免使用对结果的参考,以适合您的问题,通过重新编写sum()
:
int sum() const {
return value + (next.get() ? next->sum() : 0);
}
5
当然!例如:
class Foo
{
public:
int Factorial(int x)const
{
return x==1 ? 1 : x*Factorial(x-1);
}
}
您只能在类上调用const函数,但除此之外没有限制!
相关问题
- 1. Const对象,Const成员函数和C++中的可变变量
- 2. 由非const成员函数改变的可变变量
- 3. const函数,但我可以“修改”类
- 4. 更改递归函数中的变量
- 5. Javascript:修改一个打印出可变数量参数的递归函数?
- 6. python中的递归'不可变'函数
- 7. Haskell - 递归函数中未修改的变量
- 8. 我可以修改一个const成员变量吗?
- 9. 如何修改R中函数中的可变变量?
- 10. const成员函数可变
- 11. 可以修改Vala函数参数变量吗?
- 12. 在递归函数中共享变量
- 13. 类中的const函数可以改变成员值吗?
- 14. C++传递变量的函数变化取之于可变
- 15. 可修改的全局变量C++
- 16. 是否可以修改$ _SESSION变量?
- 17. 快速的问题:可以非静态函数修改静态变量在C++
- 18. 可以函数尾递归
- 19. 可以将可变数量的参数传递给函数吗?
- 20. 可变函数变量
- 21. 递归函数可以释放它自己的互斥量吗?
- 22. 我可以在函数声明中传递变量吗?
- 23. 布尔返回递归函数意外地改变变量
- 24. 外部函数中的变量不可修改
- 25. 有一个修改'scratchpad'变量的const函数是否正确?
- 26. 修改传递给C函数的Python变量
- 27. C++中可变数量的变量
- 28. 这可以变成一个尾递归函数吗?
- 29. 改变全局变量的函数失效 - 如何修复它?
- 30. 全局变量修改的const成员函数,其中通过全局函数
你为什么不先试试它?它需要多少努力? – Nawaz 2011-01-27 17:11:50
@Nawaz:“它对我有用”和“明确定义的行为”很难区分 – Flexo 2011-01-27 17:12:36