请教"递归算法"
sdcer 2003-10-16 04:51:40 以前我学过数据结构,就遇到过这个东西,当时下了一番功夫,可说实在的,还是没弄太明白,最多是可以分析明白,但如果是自己写,根本就写不出来,而且什么时候用递归,更是不得而知,所以,根本就不算明白,下面是一个递归过程,用来向一个树型控件内填入磁盘的文件夹和文件(象windows资源管理器的左边视图),下面这个函数是填入子目录的(非盘符),今天终于又遇到了递归,可还是不明白为什么这样写,分析了半天,总算知道这样写可以达到目的,但这不够啊,我想知道什么时候用递归,而且递归语句应用在程序的什么位置(哪一行?)。下面是代码:
void CTreeViewDlg::GetDriveDir(HTREEITEM hParent)
{
//以下是向一个目录内深入游历的语句。
HTREEITEM hChild = m_tree.GetChildItem(hParent);
while(hChild)
{
CString strText = m_tree.GetItemText(hChild);
if(strText.Right(1) != "\\")
strText += _T("\\");
strText += "*.*";
CFileFind file;
BOOL bContinue = file.FindFile(strText);
while(bContinue)
{
bContinue = file.FindNextFile();
if(file.IsDirectory() && !file.IsDots())
m_tree.InsertItem(file.GetFileName(),hChild);
}
GetDriveDir(hChild);//为什么要把递归语句放在这一行?
//下面是目录之间的转换,即一个目录游历完
//毕,就进行下一个目录的游历。
hChild = m_tree.GetNextItem(hChild,TVGN_NEXT);
}
}