下面是收集的一些递归实现的小算法,勤加练习,相信每一个人都能对简单的递归驾驭自如!
从1加到n的一种递归的简洁写法
int AddFrom1ToN_Recursive(int n)
{
return n<=0 ? 0 : n+AddFrom1ToN_Recursive(n-1);
}
求2进制,8进制,16进制的递归写法,原理相同!
void go2(int nNum)
{
if (nNum == 0)
return;
else
{
go2(nNum / 2);
printf("%d", nNum % 2);
}
}
void go8(int nNum)
{
if (nNum == 0)
return;
else
{
go8(nNum / 8);
printf("%d", nNum % 8);
}
}
void go16(int nNum)
{
if (nNum == 0)
return;
else
{
go16(nNum / 16);
printf("%d", nNum % 16);
}
}
许多时候我们都能够使用一个栈来模拟递归中的数据!
想要拿到高薪,就要有实力,如何让别人觉得你有实力,就是你写代码的能力和写代码的速度,反应速度。多多练习才是王道。
比如说面试官让你求任意一个整数有多少位的for,while,go..while,goto,递归实现在10分钟以内实现,就能考察你的代码能力。
求任意一个整数有多少位的for,while,go..while,goto,递归实现
wei++;
for (; num; num /= 10)
{
wei++;
}
while (num)
{
wei++;
num /= 10;
}
do
{
wei++;
num /= 10;
}while (num);
AAA:
if (num)
{
num /= 10;
wei++;
goto AAA;
}
5050-100-99-98-....-1 for,while,do...while,goto,递归实现
int Reduce(int sum, int n)
{
if (n == 0)
return sum;
else
{
return Reduce(sum-=n, n - 1);
}
}
下面是求二叉树叶子结点的个数的递归算法,注意使用全局变量和使用函数传参的方式保存叶子结点个数的异同。要特别掌握第二种递归的用法!
int sum = 0;
int DLR_CountLeafNum(BiTNode *root)//采用中序遍历的递归算法
{
if ( root) //非空二叉树条件,还可写成if(root !=NULL )
{
if(!root->lchild && !root->rchild) //是叶子结点则统计并打印
{
sum++;
printf("%c\n",root->data);
}
DLR_CountLeafNum(root->lchild); //递归遍历左子树,直到叶子处;
DLR_CountLeafNum(root->rchild);//递归遍历右子树,直到叶子处;
}
return(0);
}
int DLR_CountLeafNum2(BiTNode *root, int *psum)//采用中序遍历的递归算法
{
if ( root) //非空二叉树条件,还可写成if(root !=NULL )
{
if(!root->lchild && !root->rchild) //是叶子结点则统计并打印
{
(*psum) ++;
printf("%c\n",root->data);
}
DLR_CountLeafNum2(root->lchild, psum); //递归遍历左子树,直到叶子处;
DLR_CountLeafNum2(root->rchild, psum);//递归遍历右子树,直到叶子处;
}
return(0);
}
阿里巴巴面试题 用递归判断一个数组是否是递增数组
bool test1(int arr[], int n)
{
if (n == 0)
return true;
return test1(arr, n - 1) && arr[n]>arr[n - 1];
}
bool test2(int arr[], int n)
{
if (n == 1)
return true;
else if (n == 2)
return arr[n-1] > arr[n-2];
else
return test2(arr, n - 1) && arr[n-1] > arr[n - 2];
}
//由斐波那契数列引出的面试题,跳台阶
//一次可以调1级,2级,3级
int step(int nStep)
{
if (1 == nStep)
return 1;
else if (2 == nStep)
return 2;
else if (3 == nStep)
return 4;
else
return step(nStep - 1) + step(nStep - 2) + step(nStep - 3);
}
//一次可以调1级,2级
int taijie(int n)
{
if (1 == n)
return 1;
else if (2 == n)
return 2;
else
return taijie(n - 1) + taijie(n - 2);
}