在看程式員面試寶典的時候看到如下的代碼:
#include<iostream>
using namespace std;
int mystrlen(char *buf, int N)
{
if (buf[0] == 0 || N == 0) //如果空字符出現,回傳 0
return 0;
else if (N == 1) //如果字符長度為1,回傳1
return 1;
int t = mystrlen(buf, N / 2);//折半遞回取長度
if (t < N / 2)// 如果長度小于輸入N的一半,取當前長度
return t;
else //反之取下面一個字符并繼續遞回
return (t + mystrlen(buf + N / 2, (N + 1) / 2));
}
int main()
{
char buf[] = { 'a', 'b', 'c', 'd', 'e', 'f', '\0', 'x', 'y', 'z' };
int k;
k = mystrlen(buf, 20);
cout << k << endl;
system("pause");
return 0;
}
這里面不理解,int t=mystrlen(buf,N/2)這句話,為什么是取長度?
看起來這個地方會一直遞回,而回傳值只有可能是0或者1,這樣的結果在后面判斷(t<N/2)的時候就永遠走不到else呀?
請大神指教,這邊該怎么理解呢?
謝謝!
uj5u.com熱心網友回復:
真的不懂,大神們解答一下吧,謝謝轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/54943.html
標籤:基礎類
上一篇:c++編程基礎問題,有關&的意義
下一篇:玩家昵稱生成器の實作 C++
