2023-06-23
自我提升
0

递归函数

❓问题 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); }