我可以有一個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成員函數改變的可變變量
- 2. Javascript:修改一個打印出可變數量參數的遞歸函數?
- 3. python中的遞歸'不可變'函數
- 4. Haskell - 遞歸函數中未修改的變量
- 5. 如何修改R中函數中的可變變量?
- 6. const成員函數可變
- 7. 在遞歸函數中共享變量
- 8. C++傳遞變量的函數變化取之於可變
- 9. 是否可以修改$ _SESSION變量?
- 10. 可以將可變數量的參數傳遞給函數嗎?
- 11. 可以函數尾遞歸
- 12. 修改一個常量變量(const)
- 13. 布爾返回遞歸函數意外地改變變量
- 14. 遞歸函數可以釋放它自己的互斥量嗎?
- 15. 有一個修改'scratchpad'變量的const函數是否正確?
- 16. C++中可變數量的變量
- 17. 改變全局變量的函數失效 - 如何修復它?
- 18. 全局變量修改的const成員函數,其中通過全局函數
- 19. 如何修改或讀取作爲函數參數傳遞的可變向量?
- 20. C#我可以修改Request.Form的變量嗎?
- 21. sprintf()修改函數中的變量嗎?
- 22. 我們可以在constexpr函數中忽略局部變量的const嗎?
- 23. 可以在枚舉聲明中修改實例變量嗎?
- 24. 遞歸變量
- 25. R中的函數內部可以修改非全局變量嗎?
- 26. 將函數傳遞給變量以便稍後可以調用
- 27. C#遞歸函數中的回調變量
- 28. 如何在函數中傳遞const變量?
- 29. 通過引用傳遞(當變量可以改變,但沒有必要)
- 30. 實體變量可以是函數嗎?
你爲什麼不先試試它?它需要多少努力? – Nawaz 2011-01-27 17:11:50
@Nawaz:「它對我有用」和「明確定義的行爲」很難區分 – Flexo 2011-01-27 17:12:36