• 由易到难学习递归的精华


    以下是收集的一些递归实现的小算法,勤加练习,相信每个人都能对简单的递归驾驭自如!

    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
    ",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
    ",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);
    }


  • 相关阅读:
    PostgreSQL数据库
    phpcms网站搬家 至 服务器 完整并且详细过程
    phpcms网页替换验证码功能 及 搜索功能
    用phpcms切换中英文网页的方法(不用解析二级域名)、phpcms完成pc和手机端切换(同一域名)
    php判断手机段登录,以及phpcms手机PC双模板调用
    php 手动搭建环境
    phpcms内容页替换
    phpcms列表页替换
    phpcms首页替换
    phpcms栏目点击选中
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/6932696.html
Copyright © 2020-2023  润新知