• 2010.10.10 第九课 函数(二)(递归)(汉诺塔)


    函数(二)--递归

    1.函数的调用方式

    1.将函数作为表达式调用

    int add(int x,int y){
        retuen x+y;
    }
    int sum =add(100,200)
        printf("sum=%d",sum);
    

    2.将函数作为语句调用

    printf()

    3.将函数作为实参调用

    printf("%d ",max(100,150));

    2.递归

    条件::1.一定有一个终止条件

    2.包含他自己

    一些问题

    1+2+3+...+100的和
        int sum(int n){
         if(n==1){return 1;}
        else{
        return n+sum(n-1);}
    }
    
    !n
        int jiecheng(int n){
         if(n==0){return 1;}
        else {return n*jiecheng(n-1);}
        
    }
    
    兔子数列(斐波那契数列)
        1 1 2 3 5 8 13 21
     int tuzi(int n){
        if(n==1||n==2){return 1;}
        else{
            return n+tuzi(n-1);
        }    
    }
      
    
    有n个人排成一队,问第n个人多少岁,他回答比前面一个人大2岁,再问前面一个人多少岁,他回答比前面一个人大2岁,一直问到最后问第一个人,他回答10岁
        int age(int n)
    {	
        int i;	
        if (n == 1)		
            i = 10;	
        else		
            i = age(n - 1) + 2;	
        return i;
    }
    
    汉诺塔
        
        void hnt(int n,char a, char b,char c,){
         if (n==1)
         {printf("%c->%c
    ",a,c);}
        else{
            hnt(n-1,a,c,b);
           printf("%c->%c
    ",a,c);
             hnt(n-1,b,a,c);
            }
    }
    
    /*hnt(3, a, b, c) {
    
    1..hnt(3 - 1, a, c, b) = {
    	hnt(2 - 1,a,b,c) = {a->c}
    	a->c = {a->b}
    	hnt(2 - 1,c,a,b) = {c->b}
    	
    	}
    2..a->c
    3..hnt(3 - 1, b, a, c) = {
    	hnt(2 - 1,b,c,a) = {b->a}
    	a->c = {b->c}
    	hnt(2 - 1,a,b,c) = {a->c}
    	}*/
    
    
    /*
    hnt(4, a, b, c) = 
    {
    1...hnt(4 - 1,a,c,b)  =
        {
    		1..hnt(3 - 1,a,b,c) = 
    	          {
                1. hnt(2-1,a,c,b)
    			2. a->c
    	        3. hnt(2-1,b,a,c)
                  }
    		2..a->b
    		3..hnt(3 - 1,c,a,b) =
    	         {
    		     1.hnt(2-1,c,b,a)
    			 2.c->b
    	         3.hnt(2-1,a,c,b)
                 }
        }
    2...a->c
    3...hnt(4 - 1,b,a,c) = 
    	{
    		1..hnt(3 - 1,b,c,a) =
    	         {
                    1. hnt(2-1,b,a,c)
    				2. b->a
    	            3. hnt(2-1,c,b,a)
                 }
    	   2..b->c
    	   3..hnt(3 - 1,a,b,c) = 
    		    {
    				 1.hnt(2 - 1,a,c,b)
    				 2.a->c
    				 3. hnt(2 - 1,b,a,c)
    		    }
        }
    
    }
    */
    
  • 相关阅读:
    Visual Studio 2008 SP1 & .NET Framework 3.5 SP1 使用感受
    体验 DreamSpark
    如何在vc 6.0下配置 opencv 1.0
    注释一个opencv摄像头程序
    Java数据库设计中的14个技巧
    DataReader的使用
    JSP是不是Java发展史上的一大败笔?
    双十一谁才是受益者?
    用JAVA中的多线程示例生产者和消费者问题
    SQL的基本操作
  • 原文地址:https://www.cnblogs.com/heerha/p/13832846.html
Copyright © 2020-2023  润新知