#include <iostream>
using namespace std;
int recur(int x) {
1 and recur(--x);
cout << x;
return x;
}
int main() {
recur(10);
return 0;
}
回答
1 and recur(--x);
相當於
recur(--x);
顯然你正在無限遞歸調用導致堆棧溢出,然後分段錯誤。
我猜你的意思
x and recur(--x);
這使得只有當x是非零的遞歸調用。
...並以一種非常不明顯的方式。傾向於tzaman提出的'if(x <= 0)return 0;',因爲它更具可讀性,並且在後面的代碼更改導致'x'在向負無窮大的方向跳過0時更安全。 – msw 2010-05-11 08:58:39
這是一個無限遞歸。所以它會在堆棧空間用盡時進行故障排除。
它沒有遞歸的終止條件,所以會遞歸,直到你用完堆棧空間。
recur
是一個無限循環;你需要在那裏放置一個基本條件,所以它停止調用自己。
例如(在功能的頂部)if (x <= 0) return 0;
另外,1 and
有什麼意義?這是一個無操作...也許你的意思是x and
,這將停止遞歸,當x
達到0
,只要你有一個正數(負值將仍然會導致無限循環)recur
。
負值不會造成無限循環,但您仍然可能會炸燬堆棧,所以它基本上是一樣的東西。 – 2010-05-11 08:35:08
遞歸函數不是__looping,__它是__recursing .__因此,它不是__endless循環,__而是__endless遞歸.__ – sbi 2010-05-11 08:46:52
- 1. 這段代碼爲什麼會給我一個分段錯誤?
- 2. 爲什麼這個代碼片段給分段錯誤
- 3. 這個C++代碼爲什麼會產生分段錯誤?
- 4. 什麼錯誤++這段代碼在C
- 5. 爲什麼我得到這段代碼的分段錯誤?
- 6. 這段代碼爲什麼會產生分段錯誤?
- 7. 這段代碼爲什麼會產生分段錯誤?
- 8. 爲什麼我得到這段代碼的分段錯誤?
- 9. 爲什麼這個C++代碼在運行時給我分段錯誤錯誤?
- 10. 爲什麼這個代碼給分段錯誤
- 11. 爲什麼分段錯誤發生在這個openmp代碼中?
- 12. 這段代碼有什麼問題?分段錯誤:11
- 13. 這段代碼有什麼問題?我得到分段錯誤
- 14. 爲什麼std :: sort在這段代碼上拋出一個分段錯誤?
- 15. 爲什麼這段代碼產生這個錯誤?
- 16. 爲什麼這段代碼有這個錯誤:「Expected :)」?
- 17. 這段代碼的錯誤是什麼?
- 18. javascript - 這段代碼有什麼錯誤?
- 19. 這段代碼有什麼錯誤?
- 20. 這段代碼有什麼錯誤?
- 21. 這段代碼的錯誤是什麼?
- 22. 爲什麼這個看似簡單的C++代碼會產生分段錯誤?
- 23. 爲什麼這段代碼
- 24. 這段代碼爲什麼會導致分析錯誤?
- 25. 這段代碼爲什麼增加? C#
- 26. 這段代碼片段爲什麼會出現錯誤?
- 27. 這段代碼爲什麼會產生段錯誤?
- 28. 這段代碼爲什麼會出錯
- 29. 這段代碼爲什麼會出錯?
- 30. 這段java代碼爲什麼會給我這麼多錯誤?
'1和recur(-x)'是什麼?'做?從來沒有見過它 – RvdK 2010-05-11 08:18:33
堆棧溢出? – 2010-05-11 08:19:38
@Powe:'和'是'&&'的替代標記。這條線本身並沒有什麼意義(AND的左側總是爲真)並且可以寫成「recur( - x)」。在這裏,顯然沒有辦法終止。 @lorb:爲了停止遞歸,你需要在函數的頂部存在一個基本情況,而不需要另外調用它自己,比如'if(x == 0)return 0;'你也可以把'1'改成' x',當x爲0時,將停止評估右側。 – GManNickG 2010-05-11 08:19:53