一:斐波那契数列 指的是这样一个数列 1, 1, 2, 3, 5, 8, 13
规律就是这个数列从第3项开始,每一项都等于前两项之和;
代码如下:
static int fib(int n)
{
if (n < 3)
return 1;
else
return fib(n - 2) + fib(n -1);
}
二: 1 + 2 + 3 + 4 + 5 + ....+ N,累加求和,用递归的方式写
代码如下:
static int Add(int n)
{
if( n == 1)
return n;
else
return Add(n - 1) + n;
}
//可以用 ?: 三元运算符简化一下
static int Add2(int n)
{
return n == 1 ? 1 : Add2(n -1) + n;
}
三:找到二维数组中为1的岛屿的个数,岛屿是可以通过上下左右联通的,比如图中这个二维数组里的岛屿就是有4个。
这个我当时想的是两个for循环数组里的每个元素,是1的就用一个递归去找自己上下左右的元素。但是这样有个问题,如果它找了一圈没有发现有1的话,它还会找到自己,这样就是一个死循环了。然后看了网上的解析,找到是1的把1改为2就行了。
代码如下:
class Island
{
static int[,] island = {
{ 1, 0, 0, 0, 1, 0, 0, 1 },
{ 0, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 1, 1, 1, 0, 0, 0, 0 },
{ 0, 0, 1, 0, 0, 1, 1, 0 },
{ 0, 0, 0, 0, 0, 1, 1, 0 },
{ 0, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 1 },
};
public static void FindIsland()
{
int count = 0;
for(int i = 0; i < row; i++) //循环行
for(int j = 0; j < col; j++) //循环列
{
if(island[i,j] == 1) //有岛屿
{
count ++;
rec(i, j);
}
}
System.Console.WriteLine("Island count: " + count);
}
//行
static int row{
get{
return island.GetLength(0);
}
}
//列
static int col{
get{
return island.GetLength(1);
}
}
static void rec(int i, int j)
{
island[i,j] = 2;
if(i - 1 >= 0 && island[i - 1, j] == 1) //top
rec(i - 1,j);
if(i + 1 < row && island[i + 1, j] == 1) //bot
rec(i + 1,j);
if(j - 1 >= 0 && island[i, j - 1] == 1) //left
rec(i,j - 1);
if(j + 1 < col && island[i, j + 1] == 1) //right
rec(i,j + 1);
}
}