10.8VR课程上课笔记

113 阅读1分钟

回顾

            int[] a = { 1,2,3,4};
            int[] b = new int[5];
            Console.WriteLine(String.Join(" ", b));//连接函数
            string str = "1,3,5";
            string[] c = str.Split(",");//切割字符串

函数的定义

           static int Max(int num) //static 是修饰符,表示静态函数,void表示返回值,要是没有返回值那么返回值的类型是void,也可以是其他类型
           {
                  
                  return 2;
           }

练习:区间中的真素数

            static bool isPrime(int num)
            {
                for (int i = 2; i < num; i++)
                {
                    if (num % i == 0) return false;
                }
                return true;
            }
            //创建一个方法,将一个数反转
            static int getReverse(int num)
            {
                string strNum = Convert.ToString(num);
                string strNum2 = "";
                for (int i = strNum.Length - 1; i >= 0; i--)
                {
                    strNum2 += strNum[i];
                }
                return Convert.ToInt32(strNum2);
            }
            Console.WriteLine("请输入第二个数");
            string str = Console.ReadLine();
            string[] strArray = str.Split(" ");
            int M = Convert.ToInt32(strArray[0]);
            int N = Convert.ToInt32(strArray[1]);
            string strOut = "";
            //循环遍历 M到N之间的数判断是否是素数
            for (int i = M; i <= N; i++)
            {
                if (isPrime(i) && isPrime(getReverse(i)))
                {
                    if (strOut == "")
                    {
                        strOut += i;
                    }
                    else
                    {
                        strOut += "," + i;
                    }
                }
            }
            if (strOut == "")
            {
                Console.WriteLine("no");
            }
            else
            {
                Console.WriteLine(strOut);
            }

image.png

理解params的用法

           static void getNum(params int[] numArray)
            {
                Console.WriteLine(String.Join(" ", numArray));
            }
                getNum(1, 2, 3, 4);//params就是把我们要输入的一系列的数字转变成数字*/

练习:定义一个函数,输出一个数字中的所有因子

        static void getDivisor(int num)
            {
              
                for (int i = 1; i <= num; i++)
                {
                    if (num % i == 0)
                    {
                        Console.WriteLine(i);
                    }

                }

             
            }
            Console.WriteLine("请输入第一个数");
            int a = Convert.ToInt32(Console.ReadLine());
            getDivisor(a);

image.png

递归函数的理解

递归就是,函数中调用自己,这样就会进入一直调用自己的套娃行为,所以递归一般会有一个出口,这个出口的目的就是停止调用自己

练习1:已知1 1 2 3 5 8 13 21 34,,,,,我们发现后面的数是前面的数的和,所以我们说这个数列为斐波那契数列。题目要求输入n,求出n的斐波那契数列 比如输入4输出1 1 2 3

          static int Fib(int n)
            {
                if (n == 1 || n == 2) return 1;
                return Fib(n - 1) + Fib(n - 2);
            }
            int num = Convert.ToInt32(Console.ReadLine());
            for(int i=1;i<=num;i++)
            {
                Console.WriteLine(Fib(i) + " ");
            }

image.png

练习2 有关系式11+22+......+k*k<2000,编写一个程序,求出满足此关系的K的最大值,利用递归和循环解决这个问题

         static int getFK(int k)
            {
                if (k == 1) return 1;
                return getFK(k - 1) + k * k;
            }
            int i = 1;
            while(true)
            {
                if (getFK(i) >= 2000) break;
                i++;
            }
            Console.WriteLine(i - 1);

image.png

练习三:

猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了 个。第二天又将剩下的桃子吃掉一半,又多吃了- -个。以后每天都吃前一 天剩下的一半零-个。到第10天在想吃的时候就剩一个桃子了,问第一天 共摘下来多少个桃子?并反向打印每天所剩桃子数。

           static int getP(int day)

            {
                if (day == 10) return 1;
                return (getP(day + 1) + 1) * 2;

            }
            for(int i=1;i<=10;i++)
            {
                Console.WriteLine("第{0}天的桃子数:{1}", i, getP(i));
            }

image.png