之前一直不太会用递归,想知道递归对应的数学原理。现在大概明白了。
递归的数学原理是:数学归纳法。
以下面二叉搜索树的插入为例:
Insert(X,BST)的作用:是创建一个存储X数据的结点,并按二叉搜索树的规则插入,并返还二叉搜索树的根结点(简洁地说就是插入元素,返回根结点)。
1、二叉树有0个结点,即BST为空,Insert函数代码成立。
2、二叉树有一个结点时,Insert函数代码成立。
3、假设Insert函数对小于等于n个结点的二叉树都成立。根据假设,则Insert函数对于有n+1个结点的二叉树成立。故对所有结点的二叉树成立。
PS. 我只是明白了大概的意思,感觉并不是很透彻。还有我并不能很熟练得应用递归。
//二叉搜索树的插入
BinTree Insert(ElementType X,BinTree BST)//插入后返回根结点的位置
{
if(!BST){
BST=malloc(sizeof(struct TNode));
BST->Data=X;
BST->Left=BST->Right=NULL;
}
else
if(X<BST->Data)
BST->Left=Insert(X,BST->Left);//要是把BST->Left=改为return 会怎么样?
else if(X>BST->Data) //虽然建立了插入元素的结点,但是没有连在树上
BST->Right=Insert(X,BST->Right);
return BST;
}
BinTree Delete(ElementType X,BinTree BST)
{
Position Tmp;
if(!BST) printf("未找到要删除的元素\n");
else if(X>BST->Data) BST->Right=Delete(X,BST->Right);
else if(X<BST->Data) BST->Left=Delete(X,BST->Left);
else{
if(BST->Left&&BST->Right){
Tmp=FindMin(BST->Right)
BST->Data=Tmp->Data;
BST->Right=Delete(BST->Data,BST->Right);
}else{
Tmp=BST;
if(!BST->Left) BST=BST->Right;
if(!BST->Right) BST=BST->Left;
free(Tmp);
}
}
return BST;
}