递归
递归调用的框架图
递归关注的因素:退出条件、递归的参数有哪些、递归的返回值、局部变量、全局变量、合适输出、会不会出现栈溢出。
递归调用一定包括:① 递归调用部分,② 递归停止条件,③ 递归返回值(注意:递归可以有多个结束条件)
递归的缺陷:效率低、递归的层次太深,容易导致栈溢出。
例子:统计字符串中第一次出现的空格前的字符个数。
int callen(char* str){
if (str[0] == ' '){
return 0;
}else{
return callen(str+1)+1;
}
}
循环
用C++,实现一个螺旋队列,如下图
const int MaxLen = 8;
void ScrewArray(int iDubArr[][MaxLen])
{
int iM = 0;
for (int iTotal=0; iTotal<=MaxLen/2; iTotal++)
{
int iRow,iCol;
//move right
for (iRow=iTotal; iRow<MaxLen-iTotal; iRow++)
{
iDubArr[iTotal][iRow] = iM++;
}
//move down
for (iCol=iTotal+1; iCol<MaxLen-iTotal; iCol++)
{
iDubArr[iCol][iRow-1] = iM++;
}
//move left
for (iRow=MaxLen-iTotal-2; iRow>=iTotal; iRow--)
{
iDubArr[iCol-1][iRow] = iM++;
}
//move up
for (iCol=MaxLen-iTotal-2; iCol>iTotal; iCol--)
{
iDubArr[iCol][iRow+1] = iM++;
}
}
}
int main()
{
int iDubArr[MaxLen][MaxLen]={0};
ScrewArray(iDubArr);
for (int i=0; i<MaxLen; i++)
{
for (int j=0; j<MaxLen; j++)
{
printf("%d\t",iDubArr[i][j]);
}
printf("\n");
}
return 0;
}