回顾
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);
}
理解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);
递归函数的理解
递归就是,函数中调用自己,这样就会进入一直调用自己的套娃行为,所以递归一般会有一个出口,这个出口的目的就是停止调用自己
练习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) + " ");
}
练习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);
练习三:
猴子第一天摘下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));
}