函数调用,枚举和递归

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

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

时间: 2024-10-28 11:31:05

函数调用,枚举和递归的相关文章

函数 枚举和递归

1.函数 一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能.所有的高级语言中都有子程序这个概念,用子程序实现模块的功能.在C#语言中,子程序的作用是由一个主函数和若干个函数构成.由主函数调用其它函数,其它函数也可以互相调用.同一个函数可以被一个或多个函数调用任意多次. 在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用.要善于利用函数,以减少重复编写程序段的工作量. void是没有返回值,括号内是参数private只能在当前类里面用,public公共的,

枚举类型 递归

枚举类型:         一组常量的组合         在不指定任何索引的情况下,默认第一个字段从0开始,之后的依次+1         在指定了某个索引的情况下,之后的字段索引会依次+1         若之前定义的一个字段的索引指向了之后的某个默认字段,那么,他俩完全相同         若定义枚举类型时,下面有个字段等于之前的一个字段,那么就是等于这个字段                 若等于之前的一个常量字段的时候强制取int,那就是等于的这个字段的索引号       枚举里面有默

c语言函数, 函数调用及函数递归

1. 函数的定义: 返回值类型 函数名(形参列表) {函数体(函数的实现内容)}, 注意: 如果没有参数, 小括号也是必不可少的.  函数与函数之间可以嵌套调用(也就是在一个函数内部可以调用另外一个函数), 但是不能嵌套定义(不能在一个函数内部定义另外一个函数) 形参: 形式上的参数, 在函数定义时, 给定的参数叫做形参, 是一个一个的变量, 存储的数据在调用之前完未知 实参: 函数调用时给定的参数叫做实参, 是一个唯一确定的数据. 实参向形参传递的过程是一个拷贝的过程 函数相当于公司的部门,

C# Arraylist + struct 综合练习 枚举ENUE 递归

枚举类型 一组常量的组合, 在不制定任何索引的情况下,默认第一个字段从0开始,之后的依次+1 在指定了某个索引的情况下,之后的依次+1 若之前定义的某字段的索引指向了之后的某个默认字段,那么他俩完全相同 不需要初始化 Console.WriteLine(meiju.five); //常量字段 Console.WriteLine((int)meiju.five); //字段代表的值 Console.WriteLine(meiju.one); //常量字段 Console.WriteLine((in

【ACwing 93】【模版】非递归实现组合型枚举——模拟递归

(题面来自ACwing) 从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案. 输入格式 两个整数 n,m ,在同一行用空格隔开. 输出格式 按照从小到大的顺序输出所有方案,每行1个. 首先,同一行内的数升序排列,相邻两个数用一个空格隔开. 其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如1 3 5 7排在1 3 6 8前面). 数据范围 n>0 ,0≤m≤n ,n+(n−m)≤25 此题的正解是dfs枚举,在之前的博客中有所提及.现在考虑用循环模拟机器

UVA 1354 Mobile Computing(天平难题,枚举子集,递归,好题*)

1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 5 /** 6 思路:在每一个根节点枚举左右子树 7 8 学习: 9 (1)枚举子集的方法 例如 枚举 s = 100101 的子集 10 for(int l = (s-1)&s , l > 0 ; l = (l-1) & s){ 11 int r = s ^ l; 12 (2)思考:如何表示 左边距离 右边距离 . 该点的

Java数据结构和算法之递归

四.递归 递归是函数调用自身的一种特殊的编程技术,其应用主要在以下几个方面:   阶乘 在java当中的基本形式是: Public  void  mothed(int n){//当满足某条件时: Mothed(n‐1): } 递归二分查找 Java二分查找实现,欢迎大家提出交流意见.  /** *名称:BinarySearch *功能:实现了折半查找(二分查找)的递归和非递归算法. *说明: *     1.要求所查找的数组已有序,并且其中元素已实现Comparable<T>接口,如Integ

poj 2965 The Pilots Brothers&#39; refrigerator[ 枚举 ]

传送门:http://poj.org/problem?id=2965 思路:二进制枚举,递归输出路径.G++ 900+Ms勉强过,C++超时. 代码: #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<queue> #include<stack> #include<map>

编程思想之递归

原文:http://blog.csdn.net/luoweifu/article/details/42472303 我之前写过关于递归算法的博文,但作为编程思想系列的文章不得不再对它进行进一步深入的剖析.因为它是一种简单.常用又重要的一种编程思想. 什么叫递归? 举一个通俗的例子: 有一个8俩重的苹果要你切成重量相等的若干份,每一份的重量不能大于1俩.你肯定会想到这样做: 1.第一刀先把一个苹果切成重量均等的2份A1和A2: 2.再把其中的一份A1切成重量均等的两份A11和A12, 把A2切成均