2013-02-27 21 views
-3
int foo(char *p) 
{ 
static int i = 0; 
if (*p == '\0') return i; 
i++; 
return foo(p+1); 
} 

如果將此函數放置在通用庫中,會出現什麼問題。我如何修改代碼來回避問題? 如果該代碼被放置在通用庫中,它是否會返回正確的字符串長度?如果函數放置在通用庫中,該函數會導致什麼錯誤?

+3

你爲什麼這麼問? – QuentinUK 2013-02-27 12:47:05

+4

我希望這段代碼永遠不會放在任何庫中。它不是線程安全的,不會檢查或斷言NULL,在多次調用時表現奇怪,並且效率低下。 – pmr 2013-02-27 12:48:17

+0

我想這只是一個隨機的作業問題。甚至是一個糟糕的問題。 – speeder 2013-02-27 12:50:47

回答

2

的一個問題是,國家之間的通話持續:

foo("hello"); 
foo("world"); 

第二次調用將返回不正確的結果,因爲i不復位。

2

如果你連續兩次調用它,i將不會是你所期望的。這是因爲它在啓動時被初始化,並保留了以前的呼叫價值。

此外,它不適合線程,當「搜索空間」快速減少時,遞歸的思想最好使用,就像在每個遞歸級別減半空間的二分搜索一樣。

用遞歸處理字符串是一個頭腦的想法,因爲您一次只能減少一個字符的搜索空間。

相關問題