递归函数
❓问题 f(n)=f(n-1)+f(n-2) f(0)=2 f(1)=3 ,⽤程序求得f(40)
c# static int F(int n)
{
if (n == 0)
{
return 2;
}
if (n == 1)
{
return 3;
}
int res = F(n - 1) + F(n - 2);
return res;
}
//主函数入口
static void Main(string[] args)
{
Console.WriteLine(F(40));
}
解决办法:
1、使⽤循环
2、使⽤递归函数
调⽤⾃⾝的函数就是递归函数
注意
递归函数要有递归终⽌的条件
✋编程题
利⽤递归取得10! 即10的阶乘
c# static int F(int n)
{
if (n == 1)
{
return 1;
}
int result = n * F(n - 1);
return result;
}
//主函数入口
static void Main(string[] args)
{
//10! = 10*9 ... 1
int result = 1;
for(int i = 1; i < 11; i++)
{
result = result * i;
}
Console.WriteLine(result);
//10!
f(n)=n*f(n-1)
// 10! = 10*9!
// f(1)=1
Console.WriteLine(F(10)); //调用
}
✋编程题
1+2!+3!+...+10!
利⽤多个⽅法计算结果
c# // 方法1: 1+2!+3!+...+10!
int total = 0;
for(int i = 1; i < 11; i++)
{
int temp = 1;
for (int j = 1; j < i + 1; j ++) // i 的阶乘
{
temp = temp * j;
}
total = total + temp;
}
Console.WriteLine(total);
c# // 方法2: 1+2!+3!+...+10!
static int F1(int n)
{
if (n == 1)
{
return 1;
}
int result = n * F1(n - 1);
return result; //计算递归结果
}
static int F2(int n)
{
if (n == 1)
{
return 1;
}
return F2(n-1) + F1(n); //计算递归加法后的结果
}
//主函数入口
static void Main(string[] args)
{
//f(n)=1+2!+3!+...+n!
//f(n)=f(n-1) + n!
//f1(n)=n!
//f2(n)=f2(n-1) + n!
Console.WriteLine(F2(10));
}
✋编程题 有关系式1*1+2*2+3*3+...+k*k<2000,编⼀个程序,求出满⾜此关系式的k的最⼤值 利⽤递归和循环解决这个问题
c# //f(n)=1 + 2 +.. n
//f(n)= f(n-1)+n
//f(1)=1
// 循环方式
int k = 1;
int result = 0;
while (true)
{
result += k * k;
if (result >= 2000)
{
break;
}
k++;
}
Console.WriteLine(k - 1);
c#// 递归方式
static int F(int n)
{
if (n == 1)
{
return 1;
}
return F(n - 1) + n*n;
}
//主函数入口
static void Main(string[] args)
{
int i = 1;
while (true)
{
if (F(i) >= 2000)
{
break;
}
i++;
}
Console.WriteLine(i - 1);
}