为什么这样写
递推算法,函数或者方法调用自己进行解决问题,核心思想就是把复杂的问题分解为更为简单的子问题,知道子问题弹道到能够直接求解,这是循环结束的条件
常见的例子
斐波那契数列
斐波那契数列:0,1,1,2,3,5,8......,即前两个数加起来等于第三个数,我们已知第一和第二个数是固定的,就可以拿前两个数下手
代码
cs
//封装斐波那契数列
public static int Fb(int a)
{
if(a==0){return 0;}
if(a==1){return 1;}
return Fb(a-2)+Fb(a-1);
比如a=5的时候,
Fb(3)+Fb(4)=Fb(1)+Fb(2)+Fb(3)=1+0+1+0+1+Fb(1)+Fb(2)=4+0+1=5
计算乘阶
乘阶:如果计算n的乘阶,那么计算n乘以n前面的每一个数比如计算10的乘阶 10!=10*9*8...*1=10*9!=10*9*8!=10*9*8...1!
代码
cs
public static long Jc(long c)
{
if(a==1){return 1;}
return a*Jc(a-1);
}
打印文件当中的所有子目录和文件
如果结合前几天学的文件的方法,也可以自己包装一个方法,即打印文件当中的所有子目录和文件
cs
public static void Wj(string path,int count=0)//int count 缩进个数
{
if(!Directory.Exists(path))
{
Console.WriteLine("目录不存在");
return;
}
string[] ss=Directory.GetFiles(path);
string[] ss2=Directory.GetDirectory(path);
string suojin =new string ('',count );
if(ss.Length==0&&ss2.Length==0)
{
Console.WriteLine("空空如也");
return;
}
//遍历当前的文件夹下的文件,文件不能再次遍历
foreach(string file in ss)
{
//Path.GetFileName()获取文件名字
Console.WriteLine($"{suojin}文件:{Path.GetFileName(file)}");
}
//遍历文件夹
foreach (string dir in ss2)
{
Console.WriteLine($"文件夹:{Path.GetFileName(dir)}");
//如果是文件夹,再次遍历子文件夹
count += 2;
Wj(dir,count);
}
}