根据提供的文件信息,我们可以从中提炼出以下几个主要的知识点: ### C#中的递归与阶乘 #### 一、递归的基本概念 递归是程序设计中的一种常见技术,它允许函数调用自身来解决问题。递归算法通常由两部分组成:基本情况(base case)和递归情况(recursive case)。基本情况是指可以直接解决的问题实例;而递归情况则是指通过将问题分解为更小的子问题来逐步逼近基本情况的过程。 #### 二、递归在C#中的应用示例 ##### 1. 斐波那契数列计算 在给定代码中,有一个名为`funct`的方法用于计算斐波那契数列的第n项。斐波那契数列定义为:F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2) (n ≥ 2)。 ```csharp private static int funct(int k) { int answer = 0; if (k > 0) { if (k == 1 || k == 2) { answer = 1; } else { answer = funct(k - 1) + funct(k - 2); } } return answer; } ``` 这里的基本情况是当`k`等于1或2时,直接返回1;递归情况是当`k`大于2时,通过递归调用`funct(k-1)`和`funct(k-2)`来计算结果。 ##### 2. 阶乘计算 阶乘是一个常见的数学运算,表示为n! = n * (n-1) * ... * 2 * 1。在C#中,可以通过以下递归方法实现阶乘的计算: ```csharp private int factorial(int num) { if (num < 0) { throw new Exception("数值不能为负数"); } if (num == 0) { return 1; } return num * factorial(num - 1); } ``` 这里的基本情况是当`num`等于0时,返回1;递归情况是当`num`大于0时,通过递归调用`factorial(num - 1)`来计算结果。 #### 三、注意事项 1. **性能问题**:递归虽然优雅,但在处理大规模数据时可能会导致堆栈溢出等问题。 2. **递归深度**:每次函数调用都会占用一定的内存空间,因此递归调用层数不宜过深。 3. **边界条件**:必须明确定义基本情况,否则程序可能陷入无限循环。 #### 四、其他知识点 ##### 1. 使用OleDb访问数据库 给定代码中还包含了一个使用OleDb连接到Access数据库并从中读取数据的示例。这部分代码展示了如何使用OleDbConnection、OleDbCommand等类来执行SQL查询,并使用OleDbDataAdapter填充DataSet对象。 ```csharp private void CreatMenuItem() { OleDbConnection myConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=d:\\Menu.mdb;PersistSecurityInfo=False;"); OleDbCommand myComm = new OleDbCommand("SELECT nid, name, pid FROM Items ORDER BY pid, nid", myConn); OleDbDataAdapter myAda = new OleDbDataAdapter(myComm); DataSet ds = new DataSet(); myAda.Fill(ds, "MenuItemINfos"); //... } ``` 这段代码通过创建OleDbConnection实例来连接数据库,然后使用OleDbCommand实例执行SQL查询,并通过OleDbDataAdapter填充DataSet对象。 ##### 2. 菜单项的递归构建 此外,代码中还包括了一个递归地构建菜单项的例子。`CreatBranch`方法接收一个父菜单项和一个父节点ID作为参数,并递归地添加子菜单项。 ```csharp private void CreatBranch(MenuItem parmt, int pid, DataSet ds) { int index = 0; foreach (DataRow dr in ds.Tables["MenuItemINfos"].Select("pid=" + pid)) { MenuItem mi = new MenuItem((string)dr["name"]); parmt.MenuItems.Add(index++, mi); CreatBranch(mi, (int)dr["nid"], ds); } } ``` 这段代码首先遍历符合条件的数据行,创建一个新的菜单项,并将其添加到父菜单项中。接着,对每个新创建的菜单项递归调用`CreatBranch`方法以构建子菜单。 以上就是从给定文件中提炼出的主要知识点,包括递归的基本概念、C#中递归的应用示例、注意事项以及其他相关的知识点。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int a = funct(30);
Console.WriteLine(a);
Console.Read();
Console.Read();
}
private static int funct(int k)
{
int answer=0;
if (k > 0)
{
if (k == 1 || k == 2)
{
answer = 1;
}
else
{
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助