函数、递归
一、函数:
函数是一个相对独立的代码块。善于利用函数,以减少重复编写程序段的工作量。
函数的四要素:函数名,形参(输入),返回类型(输出),函数体(加工运算)
函数的一般在class类中创建。可以简单的理解为在Main函数里输出结果,在函数里输入计算过程,可以反复调用,以减轻写代码的工作量。
(一)定义: [static] 返回类型 函数名([变量类型 变量名[,变量类型 变量名[...变量类型 变量名]]]) { 函数体 } (二)调用: [数据类型 变量名 = ]函数名([实参1[,实参2...]]) 说明: 1.函数名与变量名规则一样。 2.实参与形参一定要一一对应。 3.return所返回值一定要与"返回类型"一致。 4.函数定义没有一定的原则,只要好用就可以。 5.参数是地址的,在变量前面加ref;
(三).函数前面加注释:
为了在以后用到此函数的时候不会忘记此函数的功能,需要加一些注释,这样在使用的时候就可以将鼠标放在上面看到写好的注释以进行一定的提醒。
注释的使用方法是:在函数的上方输入///,也就是三个斜杠,然后再输入的地方输入注释。
(四).函数一个是传值,另一个是传址:
(1)传值就是将实参的值传入所调用的函数里面,实参的值并没有发生变化,默认的传值有int型,浮点型,bool型,char字符型,结构体型等等;
(2)传址就是将地址传到所调用的函数里面进行操作,实参的值也会跟着变化,传址的有数组和字符串string;
(3)上面所说的就牵扯到数据的分类,分为值类型和引用类型,值类型就是传值的那种,引用类型包括字符串类型、数组和对象,上面说的字符串类型特殊,主要是因为字符串实际上是一个字符char[]数组,它在修改的时候并不是直接修改,而是心开辟了一个存储空间也就是建立了一个新的字符串,所以它在调用、赋值的时候相当于传值,但它是引用类型的。
数字大小排序:
static int[] PaiXu(params int [] n) { for (int i = 0; i < n.Length - 1; i++)//冒泡排序 { for (int j = 0; j < n.Length - 1 - i; j++) { if (n[j] <= n[j + 1]) { int zj = n[j]; n[j] = n[j + 1]; n[j + 1] = zj; } } } return n; } static int BiJiao(int a, int b) //形式参数 { if (a >= b) { return a; } else { return b; } }
二、函数递归:
一、概念
函数体内调用本函数自身,直到符合某一条件不可继续调用。
二、应满足的条件
(1).有反复执行的过程(调用自身)。
(2).有跳出反复执行过程的条件(函数出口)。
三、注意事项
1.递归中必须要存在一个循环结束的条件。
2.递归函数的每次调用都需要栈来存储,如果次数太多的话容易造成栈溢出。
//递归,函数自己调用自己 //猴子吃桃,公园里有一堆桃子,每天猴子吃掉一半,并且扔掉一个坏的,到了第七天,猴子发现只剩下一个桃子了,问第一天公园里有多少桃子?
static void Main(string[] args)
{
int n = TaoZi(1); Console.WriteLine(n); } static int TaoZi(int day) { if (day == 7) { return 1; } int n = (TaoZi(day + 1) + 1) * 2; return n; }