一、概念
函数体内吊用本函数自身,直到符合某一条件不在继续调用。
二、应满足自身条件
(1)有反复执行的过程(调用自身);
(2)有跳出反复执行过程的条件(函数出口)
三、例子
四、注意事项
1.递归中必须要存在一个循环结束的条件。
2.递归函数的每次调用都需要栈来储存,如果次数太多的话容易造成栈溢出。
例题:
一群羊赶到个村庄去卖,每过一个村丢失之前总数的1/2零一只,过了7个村庄之后还剩两只,问最初赶出多少只羊
class Program
{
public int dgqiuyang(int cun)
{
int sum = 0;
if (cun == 7)
{
return 2;
}
sum = 2*(dgqiuyang(cun + 1) + 1);
return sum;
}
static void Main(string[] args)
{
Program hb = new Program();
double x = hb.dgqiuyang(1);
Console.Write("递归求羊"+x);
Console.ReadLine();
}
}
}
例题:
//编写递归函数求 2*4*6*……*(2n) 的结果
public int dgqiuyang(int cun)
{
int sum = 0;
if (cun == 7)
{
return 2;
}
sum = 2 * (dgqiuyang(cun + 1) + 1);
return sum;
}
static void Main(string[] args)
{
//Program jie= new Program();
//Console.Write("请输入一个值:");
//int n = int.Parse(Console.ReadLine());
//int b = jie.jie(n);
//Console.Write(b);
//Console.ReadLine();
//有雌雄一对兔子,每过一个月便可繁殖雌雄各一的一对小兔子。
//问过n个月后共有多少对兔子?
public int t(int z)
{
int sh = 0;
if (z == 1)
{
return 2;
}
sh = 2 * t(z - 1);
return sh;
}
static void Main(string[] args)
{
//Program tt = new Program();
//Console.Write("请输入月数:");
//int m = int.Parse(Console.ReadLine());
//int y = tt.t(m);
//Console.Write(y);
//Console.ReadLine();
//5个候选人竞选班长:张三,李四,王五,赵六,冯七
//班级中共有20人,20人轮流投票
//只要不是1~5之内的视为作废
//最后要知道谁的票数最多,当选班长
enum Houxuanren : int
{
one = 1,
two,
three,
four,
five
}
Console.WriteLine("请输入竞选班长的代码1、2、3、4、5来分别代表 张三, 李四, 王五, 赵六, 冯七");
int[] shuzu = new int[20];
for (int i = 1; i <= 20; i++)
{
Console.Write("请第" + i + "位同学来进行投票:");
shuzu[i - 1] = int.Parse(Console.ReadLine());
}
Console.WriteLine("投票结束!按下回车开始统计票数!");
Console.ReadLine();
int zhangsan = 0, lisi = 0, wangwu = 0, zhaoliu = 0, fengqi = 0, zuofei = 0;
for (int i = 0; i < 20; i++)
{
switch (shuzu[i])
{
case (int)Houxuanren.one:
zhangsan++;
break;
case (int)Houxuanren.two:
lisi++;
break;
case (int)Houxuanren.three:
wangwu++;
break;
case (int)Houxuanren.four:
zhaoliu++;
break;
case (int)Houxuanren.five:
fengqi++;
break;
default:
zuofei++;
break;
}
}
if (zhangsan > lisi && zhangsan > wangwu && zhangsan > zhaoliu && zhangsan > fengqi)
{
Console.WriteLine("张三胜出!票数为" + zhangsan);
}
else if (lisi > zhangsan && lisi > wangwu && lisi > zhaoliu && lisi > fengqi)
{
Console.WriteLine("李四胜出!票数为" + lisi);
}
else if (wangwu > lisi && wangwu > zhangsan && wangwu > zhaoliu && wangwu > fengqi)
{
Console.WriteLine("王五胜出!票数为" + wangwu);
}
else if (zhaoliu > lisi && zhaoliu > wangwu && zhaoliu > zhangsan && zhaoliu > fengqi)
{
Console.WriteLine("赵六胜出!票数为" + zhaoliu);
}
else if (fengqi > lisi && fengqi > wangwu && fengqi > zhaoliu && fengqi > zhangsan)
{
Console.WriteLine("冯七胜出!票数为" + fengqi);
}
Console.WriteLine("作废的票数为:" + zuofei);
Console.ReadLine();
}
}
}