1. N个信封和N封信,全部装错的可能有多少种?
如果第一封信和第二封信的信封和信交换,相当于缩小了问题规模D(n-2)
如果第二封信不选择第一个信封,就类似于原来的问题D(n-1)
所以问题的D(n)=D(n-2)+D(n-1)
2. 向上爬有N阶的楼梯,可以一次爬一阶,也可以两阶,求所有的方法?
最后到达终点有两种可能性,一种是一步,那么前面的一共有D(n-1)中走法
另一种是两步,那么前面一共有D(n-2)种走法。
D(n)=D(n-2)+D(n-1)
3. 打印出N个数的所有排列?
这一题涉及到回溯和递归。回溯和递归是一个比较难的问题。
4. 用递归的方法求N个数中最大的数及其位置。
怎么找到位置还没有做出来。
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("Please input number:");
int num1 = Convert.ToInt32(System.Console.ReadLine()) ;
List<int> num=new List<int>();
for (int i = 0; i < num1; i++)
{
num.Add( Convert.ToInt32(System.Console.ReadLine()) );
}
// int count;
System.Console.WriteLine( calculateN(num));
System.Console.ReadLine();
}
//比较两个数的大小
static int larger(int one, int two)
{
if (one >= two)
return one;
else
return two;
}
//递归的方法找到一个list中最大的数
static int calculateN(List<int> a)
{
if (a.Count == 2)
{
return larger(a[0], a[1]);
}
else {
return larger(a[0],calculateN(a.GetRange(1,a.Count-1)));
}
}
}