int foo(char *p)
{
static int i = 0;
if (*p == '\0') return i;
i++;
return foo(p+1);
}
如果將此函數放置在通用庫中,會出現什麼問題。我如何修改代碼來回避問題? 如果該代碼被放置在通用庫中,它是否會返回正確的字符串長度?如果函數放置在通用庫中,該函數會導致什麼錯誤?
int foo(char *p)
{
static int i = 0;
if (*p == '\0') return i;
i++;
return foo(p+1);
}
如果將此函數放置在通用庫中,會出現什麼問題。我如何修改代碼來回避問題? 如果該代碼被放置在通用庫中,它是否會返回正確的字符串長度?如果函數放置在通用庫中,該函數會導致什麼錯誤?
的一個問題是,國家之間的通話持續:
foo("hello");
foo("world");
第二次調用將返回不正確的結果,因爲i
不復位。
如果你連續兩次調用它,i
將不會是你所期望的。這是因爲它在啓動時被初始化,並保留了以前的呼叫價值。
此外,它不適合線程,當「搜索空間」快速減少時,遞歸的思想最好使用,就像在每個遞歸級別減半空間的二分搜索一樣。
用遞歸處理字符串是一個頭腦的想法,因爲您一次只能減少一個字符的搜索空間。
你爲什麼這麼問? – QuentinUK 2013-02-27 12:47:05
我希望這段代碼永遠不會放在任何庫中。它不是線程安全的,不會檢查或斷言NULL,在多次調用時表現奇怪,並且效率低下。 – pmr 2013-02-27 12:48:17
我想這只是一個隨機的作業問題。甚至是一個糟糕的問題。 – speeder 2013-02-27 12:50:47