每次写递归函数的时候总是不能很好的做完,记录一点东西供自己日后参考。
比如,OC里递归函数的基本形式是:-(void) TraverseDevice:(CFLDepartment*) pDepart parentNode:(TreeNode*)pParentNode
pDepart 这个是递归时所需要的数据,pParentNode是父节点的指针或对象,以下是一个简单例子:
-(NSInteger)LoadDevXml:( CFLOrganization*)pOrg
{
CFLDepartment *pDepartment = pOrg->getDepartment(i);
while(pOrg->isDepartmentEof() != FALSE && pDepartment != NULL)
{
myDevNodes[m_treeIndex] = [[TreeNode alloc]init];
myDevNodes[m_treeIndex].title=[NSString stringWithCString:pDepartment->_name encoding:m_enc];
myDevNodes[m_treeIndex].key=[NSString stringWithFormat:@"%d",pDepartment->_id];
[self TraverseDevice:pDepartment parentNode:myDevNodes[m_treeIndex]];
pDepartment = pOrg->getNextDepartment();
}
}
return i;
}
-(void) TraverseDevice:(CFLDepartment*) pDepart parentNode:(TreeNode*)pParentNode
{
int i = pDepart->firstDepartment();
if(i != - 1)
{
CFLDepartment *pChildDepart = pDepart->getDepartment(i);
while(pDepart->isDepartmentEof() != FALSE && pChildDepart != NULL)
{
[self indexInc];
myDevNodes[m_treeIndex] = [[TreeNode alloc]init];
myDevNodes[m_treeIndex].title=[NSString stringWithCString:pChildDepart->_name encoding:m_enc];
myDevNodes[m_treeIndex].key=[NSString stringWithFormat:@"%d",pChildDepart->_id];
[pParentNode addChild:myDevNodes[m_treeIndex]];
pParentNode.expanded = YES;
[self TraverseDevice:pChildDepart parentNode:myDevNodes[m_treeIndex]];
pChildDepart = pDepart->getNextDepartment();
}
}
}