一道递归算法题,一道冒泡算法题

最近看面试题,说这两道题出的概率比较大,就研究了一下。记录一下,回头面试时再看看,哈哈。

题目一:一列数规则如下: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);
        }
    }


 

题目二:编程实现一道冒泡排序算法?

//冒泡排序(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 - 11);
        return sb.ToString();
    }

 
原文地址:https://www.cnblogs.com/allen76615519/p/1744988.html