主题:书上的一些东西不明白
书上说“由于简单递归问题在求解过程中,无需进行试探和回溯”,
我不理解,没办法区分什么是简单递归问题,什么是复杂递归问题。递归不是分直接递归和间接递归的么?什么时候有的简单递归和复杂递归的区别??
什么叫无需进行试探和回溯??什么叫试探,什么叫回溯?
说实话,我书上确实没有发现有解释这名词的地方。
书上还有个题目我不理解:按照中点优先的顺序遍历线性表问题。一直线性表list以顺序存储方式存储,要求按以下顺序输出list中所有结点的值:首先输入线性表list中点位置上的元素值,然后输出中点左部所有元素的值,再输出中点右部所有元素的值;而无论输出中点左部所有元素的值还是中点右部所有元素的值,也应该遵守以上的规律;例如:已知数组list中的元素值为:
18 32 4 9 26 6 10 30 12 8 45
按照中点优先顺序遍历的输出结果为
6 4 18 32 9 26 12 10 30 8 45
下面是递归的算法
#define maxsize 100
typedef int listarr[maxsize];
void listorder(listarr list,int left,int right)
{int mid;
if(left<=right) //这句话我就不明白什么意思,非常不明白,什么叫“左边小与右边”????
{mid=(left+right)/2;
printf("%4d",list[mid]);
listorder(list,left,mid-1); //书上说是将中点左部元素按照中点优先顺序输出,我有点不理解,有点看不出来
listorder(list,mid+1,right);
}
我不理解,没办法区分什么是简单递归问题,什么是复杂递归问题。递归不是分直接递归和间接递归的么?什么时候有的简单递归和复杂递归的区别??
什么叫无需进行试探和回溯??什么叫试探,什么叫回溯?
说实话,我书上确实没有发现有解释这名词的地方。
书上还有个题目我不理解:按照中点优先的顺序遍历线性表问题。一直线性表list以顺序存储方式存储,要求按以下顺序输出list中所有结点的值:首先输入线性表list中点位置上的元素值,然后输出中点左部所有元素的值,再输出中点右部所有元素的值;而无论输出中点左部所有元素的值还是中点右部所有元素的值,也应该遵守以上的规律;例如:已知数组list中的元素值为:
18 32 4 9 26 6 10 30 12 8 45
按照中点优先顺序遍历的输出结果为
6 4 18 32 9 26 12 10 30 8 45
下面是递归的算法
#define maxsize 100
typedef int listarr[maxsize];
void listorder(listarr list,int left,int right)
{int mid;
if(left<=right) //这句话我就不明白什么意思,非常不明白,什么叫“左边小与右边”????
{mid=(left+right)/2;
printf("%4d",list[mid]);
listorder(list,left,mid-1); //书上说是将中点左部元素按照中点优先顺序输出,我有点不理解,有点看不出来
listorder(list,mid+1,right);
}