zoukankan      html  css  js  c++  java
  • 一道递归算法题,一道冒泡算法题

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

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

     
  • 相关阅读:
    《手把手教你构建自己的 Linux 系统》学习笔记(7)
    《手把手教你构建自己的 Linux 系统》学习笔记(6)
    《手把手教你构建自己的 Linux 系统》学习笔记(5)
    《手把手教你构建自己的 Linux 系统》学习笔记(4)
    《手把手教你构建自己的 Linux 系统》学习笔记(3)
    《手把手教你构建自己的 Linux 系统》学习笔记(2)
    《手把手教你构建自己的 Linux 系统》学习笔记(1)
    Mac 下如何判断 WIFI 的极限传输速度还有信号强度?
    Mac 下如何快速重启 Dock 栏?
    编译器的工作过程
  • 原文地址:https://www.cnblogs.com/allen76615519/p/1744988.html
Copyright © 2011-2022 走看看