最近看面试题,说这两道题出的概率比较大,就研究了一下。记录一下,回头面试时再看看,哈哈。
题目一:一列数规则如下:1、1、2、3、5、8、13、21、34.......... 求第30位数是多少,用递归算法实现。
//递归算法,我大概理解就是指函数调用自己来完成它的工作。这段代码直接从我找的题里粘过来了,比较简单
private int Foo(int i)
{
if (i <= 0)
{
return 0;
}
else if (i > 0 && i <= 2)
{
return 1;
}
else
{
//主要就是这句,比方说,i值为3,那么进入函数,上面两个条件不满足,直接跳至这里,3-1=2,再次调用Foo函数,这时候第二个判断条件满足,return 1,那么Foo(i-1)这个函数最终返回了1,程序再继续向下走,也就是"+"后面的那个函数了,i-2=1,再次调用函数,同样第二个判断条件满足了,return 1,这样 return Foo(i-1)+Foo(i-2); 的最终结果就是 return 1+1;看一下,当i=3(也就是第三个位置)时,值等于2。
return Foo(i - 1) + Foo(i - 2);
}
}
{
if (i <= 0)
{
return 0;
}
else if (i > 0 && i <= 2)
{
return 1;
}
else
{
//主要就是这句,比方说,i值为3,那么进入函数,上面两个条件不满足,直接跳至这里,3-1=2,再次调用Foo函数,这时候第二个判断条件满足,return 1,那么Foo(i-1)这个函数最终返回了1,程序再继续向下走,也就是"+"后面的那个函数了,i-2=1,再次调用函数,同样第二个判断条件满足了,return 1,这样 return Foo(i-1)+Foo(i-2); 的最终结果就是 return 1+1;看一下,当i=3(也就是第三个位置)时,值等于2。
return Foo(i - 1) + Foo(i - 2);
}
}
题目二:编程实现一道冒泡排序算法?
//冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。
//即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,
//大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较
//(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,
//将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。
//由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
//之前在网上看到了一些,感觉大致都差不多吧,我也写了个,自己写的,看着顺眼.
private string Sort(int[] args)
{
int temp;
StringBuilder sb = new StringBuilder();
//外循环是限制一次冒泡排序比较的元素个数
for (int i = 0; i < args.Length-1; i++)
{
//内循环,比方说有五个数,那个就比较四次,1和2,2和3,3和4,4和5,然后外循环走第二次的时候,也就是i=1以后,内循环再比较1和2,2和3,3和4,以此类推,我理解大概就是第一次比较时,把最大的排到最后一位,第二次比较时,把第二大的排在倒数第二位,就这样.
for (int j = 0; j < args.Length-1-i; j++)
{
if (args[j] > args[j + 1])
{
temp = args[j];
args[j] = args[j + 1];
args[j + 1] = temp;
}
}
}
foreach (int a in args)
{
sb.Append(a + ",");
}
sb.Remove(sb.Length - 1, 1);
return sb.ToString();
}
//即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,
//大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较
//(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,
//将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。
//由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
//之前在网上看到了一些,感觉大致都差不多吧,我也写了个,自己写的,看着顺眼.
private string Sort(int[] args)
{
int temp;
StringBuilder sb = new StringBuilder();
//外循环是限制一次冒泡排序比较的元素个数
for (int i = 0; i < args.Length-1; i++)
{
//内循环,比方说有五个数,那个就比较四次,1和2,2和3,3和4,4和5,然后外循环走第二次的时候,也就是i=1以后,内循环再比较1和2,2和3,3和4,以此类推,我理解大概就是第一次比较时,把最大的排到最后一位,第二次比较时,把第二大的排在倒数第二位,就这样.
for (int j = 0; j < args.Length-1-i; j++)
{
if (args[j] > args[j + 1])
{
temp = args[j];
args[j] = args[j + 1];
args[j + 1] = temp;
}
}
}
foreach (int a in args)
{
sb.Append(a + ",");
}
sb.Remove(sb.Length - 1, 1);
return sb.ToString();
}