我可以有一個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