2022.10.7《VR引擎程序设计基础》—学习笔记整理

101 阅读3分钟

1、函数的定义

  • 函数的定义:封装一段可执行的代码块
  • 为什么要使用函数?

原因:

  • 如果重复执行某段代码,就要重复写很多次

  • 重复代码多了不容易阅读,管理和维护

  • 函数的基本结构 -若要返回同类型的值,可以使用数组,返回不同类型的值可以使用 out参数 ref参数。

注意---错误写法:return a,b,c这样的写法是错误的!

image.png

  • 方法中的参数数组

image.png

2、函数的调用

image.png static表示修饰符,还有很多修饰符,这里static表示静态方法,这里还会涉及到更多的静态方法。

3、函数的形式参数

image.png

4、函数的递归

1.函数递归:递归的本质就是自己调用自己。

2.递归的定义:递归本身就是一个循环。
3.递归的思想:越来越接近已知值。
4.递归的总结:
1)通过自己调用自己把复杂的逻辑简单化,可以求得最终结果;
2)递归要有开始条件,也要有一个结束条件;
3)有一种递归的逻辑运算。
例题1、斐波拉契数列,输入n求出n项的斐波拉契数列

image.png

4、函数的重载

image.png

例题一、求最大篮球的单词数

给你一个字符串 text,你需要使用 text 中的字母来拼凑尽可能多的单词 "basketball"(篮球)。

字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 "basketball"。 示例 1:

输入:text = "saltaebbolko" 输出:1

示例 2:

输入:text = "saltaebbolkoxballketsba" 输出:2

示例 3:

输入:text = "english" 输出:0  

提示:

1 <= text.length <= 10^4 text 全部由小写英文字母组成

方法一、

                    char[] text = Console.ReadLine().ToCharArray();
                    char[] word = { 'a', 'b', 'l', 's', 'k', 'e', 't' };
                    int[] group = new int[26];
                    for (int i = 0; i < text.Length; i++)
                    {
                        group[text[i] - 'a']++;
                    }
                    int min = Int32.MaxValue;
                    for (int i = 0; i < word.Length; i++)
                    {
                        if (i < 3)
                        {
                            min = Math.Min(min, group[word[i] - 'a'] /2
                        }
                        else
                        {
                            min = Math.Min(min, group[word[i] - 'a']);
                        }
                    }
                    Console.WriteLine(min);

方法二、

    //利用下标记录某个数字出现的次数
        string str = Console.ReadLine();
        //每个字母出现的次数我们把它存到数组中
        int[] num = new int[7];//'a', 'b', 'l', 's', 'k', 'e', 't' 
        //遍历字符串 把每个字母出现的次数放到对应的下标里
        for (int i = 0; i < str.Length; i++)
        {
            if (str[i] == 'a')
            {
                num[0]++;
            }
            else if (str[i] == 'b')
            {
                num[1]++;
            }
            else if (str[i] == 'l')
            {
                num[2]++;
            }
            else if (str[i] == 's')
            {
                num[3]++;
            }
            else if (str[i] == 'k')
            {
                num[4]++;
            }
            else if (str[i] == 'e')
            {
                num[5]++;
            }
            else if (str[i] == 't')
            {
                num[6]++;
            }
            
        }
        num[0] /= 2;
        num[1] /= 2;
        num[2] /= 2;
        //求数组中的最小值
        int Minnum = num.Min();
        Console.WriteLine(Minnum);

二、判断素数例题

image.png

  • 测试输入:1 10 测试输出:1 2 3 5 7
  • --------------------思考过程-------------------
  • 函数一、判断是否为素数
  • 函数二、倒序拼接为新的数组
  • 遍历数组,调用函数,控制输出新的数组。

image.png

三、

  1. 定义一个函数Max,用来取得一个数组中的最大值
  2. 定义一个函数getDivisor,用来取得一个数字的所有因子,把所有因子返回

四、递归思想例题一

斐波拉契数列

  • 提示:已知 1 1 2 3 5 8 13 21 34... 我们发现后面数是前两个数的和,我们称这种数列为斐波那契数列
  • 题目要求:输入n,求出n项的斐波那契数列
  • 例:输入4 输出 1 1 2 3

image.png

五、递归思想例题二

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

image.png

五、递归思想例题三

猴子摘桃问题

image.png image.png