首页 > 代码库 > 函数调用,枚举和递归

函数调用,枚举和递归

一:函数调用的时候有这几种形式,一种参数是数组的,可以这样定义,这种参数是数组:

static void paixu(params int[] a)//可以输入数组元素,只能在数组前面加
        {
            for(int i=1;i<=a.Length-1;i++)


        }
        用的时候
        paixu(3,8,6,4,1);

一种参数是地址的,在变量前面加ref:

static void add(ref int n)//加上REF是传地址
        {

        }
        //主函数里面调用
        int a=5;
        add(ref a);

一种是函数除了返回目标值之外,加out可以返回其它值,下面这个例子中函数除了返回一个n之外,还可以返回一个p值。

 static int add(int n,out int p)  //p是输出的一个参数,用out标识,Cshap特有的
        {
            int m = n * 10;
            p = m;
            //Console.WriteLine("add函数1:{0}", n);
            n = n + 10;
            Console.WriteLine("add函数2:{0}", n);
            return n;
        }

        static void Main(string[] sgar)
        {
            int x = 5;
            int b;
            x=add(x,out b);
            Console.WriteLine("Main函数1:{0}", x);

            Console.WriteLine("Main函数2:{0}", b);
        }

二:函数前面加注释,为了在以后用到此函数的时候不会忘记此函数的功能,需要加一些注释,这样在使用的时候鼠标放到上面就会显示写好的注释,使用的时候是在函数上面输入///,也就是三个斜杠,输完之后出现这个:

///// <summary>
        /// 输入一个数字,返回它的阶乘,这里写函数的功能
        /// </summary>
        /// <param name="n">这里写n是做什么的:需要求阶乘的值</param>
        /// <returns>这里写返回的是什么东西:返回n的阶乘</returns>
        static int jiecheng(int n)
        {
            int jc = 1; int i;
            for(i=1;i<=n;i++)
            {
                jc = jc * i;

            }
            return jc;

        }

三:函数一个是传值另一个是传址;

1.传值就是将实参的值传到所调用的函数里面,实参的值并没有发生变化,默认传值的有int型,浮点型,bool型,char字符型,结构体等等。

2.传址就是将地址传到所调用的函数里面操作,实参的值也会跟着变化,传址的有数组和字符串string,字符串类型比较特殊后面说。

3.上面说的就牵扯到数据的分类,分为值类型和引用类型,值类型的就是传值的那种,引用类型包括字符串类型,数组和对象,上面说字符串类型特殊,主要是因为字符串实际上是一个字符char[]数组,它在修改的时候并不是直接修改,而是新开辟了一个存储空间也就是建立了一个新的字符串,所以它在调用、赋值的时候相当于传值,但它是引用类型的!

四:枚举

枚举enum,用比较好记忆的拼音或者英文来标记数字,下面这个例子里weiruzhi是0,zhengshi 定义它是5,所以往下依次是6,7,tuixiu又定义了9:
        //枚举,
        enum YuanGongLeiXing
        {
            WeiRuZhi,
            ShiYongQi,
            ZhengShi=5,
            NeiTui,
            JieDiao,
            TuiXiu=9

        }
    struct YuanGong
{
    public string name;
    public YuanGongLeiXing type;
}


        class Program
        {
            static void Main(string[] args)
            {
                YuanGong zhangsan=new YuanGong();
                zhangsan.name = "张三";
                zhangsan.type = YuanGongLeiXing.NeiTui;
                Console.WriteLine(zhangsan.name+(int)zhangsan.type);

            }

五:递归,递归的特点就是自己调用自己;return 是将数值返回上一级;

刚开始没满足day=7的时候,只循环调用Taozi函数,其它求值之类的都未执行,可以看做是Taozi_1,Taozi_2,。。。Taozi_6,Taozi_7;

在day=7的时候返回了一个值1到Taozi_7中,Taozi_7开始执行求值,求出第六天的桃子N,返回到Taozi_6中,这样继续下去求出了day=1时的桃子数返回

     class Program
        {
                 static int Taozi(int day)
                 {
                     if (day == 7)
                     {
                         return 1;
                     }
                     int n = (Taozi(day + 1) + 1) * 2;
                     return n;
                 }

                 static void Main(string[] args)
                 {
                     int n = Taozi(1);//求第一天有几个桃子
                     Console.WriteLine("公园里有{0}个桃子",n);
                 }

函数调用,枚举和递归