今天无所事事,于是重温了一下递归算法。突然之间发现递归算法很好用。
首先碰到的是这样的一首题目:计算数组{1,1,2,3,5,8.......} 第30位值,不用递归,我写出了以下这样的代码:
static void Main(string[] args)
{
int[] num=new int[30];
num[0]=1;
num[1]=1;
int first=num[0];
int second=num[1];
for (int i = 2; i < num.Length; i++)
{
num[i] = first + second;
first = second;
second = num[i];
}
Console.WriteLine(num[29]);
Console.ReadLine();
}
写出来,十分的累赘,于是改为归递算法来写,一目了然,十分明了。以下是代码:
static void Main(string[] args)
{
Console.WriteLine(Process1(30));
Console.ReadLine();
}
public static int Process1(int i)
{
//计算数组{1,1,2,3,5,8.......} 第30位值
if (i == 0) return 0;
if (i == 1) return 1;
else
return Process1(i - 1) + Process1(i - 2);
}
做了一些练习:
1. 计算1+2+3+4+...+100的值
static void Main(string[] args)
{
Console.WriteLine(Process2(100));
Console.ReadLine();
}
public static int Process2(int i)
{
//计算1+2+3+4+...+100的值
if (i == 0) return 0;
return Process2(i - 1) + i;
}
2. 计算1 -2 +3 +-4+ 5- 6 + 7 - 8 + 9的值
static void Main(string[] args)
{
Console.WriteLine(Process3(9) - Process3(8));
Console.ReadLine();
}
public static int Process3(int i)
{
//计算1 -2 +3 +-4+ 5- 6 + 7 - 8 + 9的值
if (i == 0) return 1;
if (i == 1) return 2;
else return Process3(i - 2) + i;
}
3.汉诺塔问题
static void Main(string[] args)
{
Hanoi(5, 'A', 'B', 'C');
Console.ReadLine();
}
public static void Hanoi(int n ,char A, char B, char C)
{
//汉诺塔问题
//将n个盘子从A座借助B座,移到C座
if (n == 1) Move(A, C);
else
{
Hanoi(n - 1, A, C, B);
Move(A, C);
Hanoi(n - 1, B, A, C);
}
}
public static void Move(char startPlace, char endPlace)
{
Console.WriteLine("Move {0} To {1}",startPlace,endPlace);
}
4.用递归法将一个整数n转换成字符串,例如,输入483,就输出字符串"483".n的位数不确定,可以是任意位数的整数。
static void Main(string[] args)
{
IntToString(483, "");
Console.ReadLine();
}
public static void IntToString(int input,String output)
{
//用递归法将一个整数n转换成字符串,例如,输入483,就输出字符串"483".n的位数不确定,可以是任意位数的整数。
// String output = "";
output = input % 10+output;
if (input / 10 != 0)
{
IntToString(input / 10,output);
}
else Console.WriteLine(output);
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/inkstone2006/archive/2008/01/22/2057853.aspx
分享到:
相关推荐
### C#递归基础 #### 什么是递归? 递归是一种编程技术,它允许一个方法或函数直接或间接地调用自身。递归通常用于解决可以通过重复相同过程分解成更小问题的问题。递归方法包含两个主要部分: 1. **基本情况**...
【C#递归算法详解】 递归算法是编程中一种重要的技术,特别是在C#这样的面向对象语言中。它涉及到函数自身调用自身的过程,通过解决更小规模的问题来解决整个问题。递归算法的核心概念包括两个关键部分:基础情况...
本篇我们将深入探讨“C#递归算法经典示例”,特别关注如何使用递归算法加载TreeView控件中的所有子节点。 首先,我们要理解什么是递归。递归是一种函数或方法调用自身的技术,通常在解决问题时,将大问题分解为若干...
总结起来,使用C#递归遍历多层目录并将信息写入XML是一种常见的任务,它结合了`DirectoryInfo`类的文件系统操作和XML的结构化数据存储。通过这样的方法,我们可以高效地管理和处理大量文件和目录数据。
下面是一个简单的C#递归解决方案: ```csharp using System; class JosephusProblem { public static int FindSurvivor(int n, int m) { // 当只剩一个人时,这个人就是幸存者 if (n == 1) return 1; // ...
在本项目中,“C#递归显示数据到TreeView”是一个关于如何使用C#编程语言将数据结构以树形视图(TreeView)的形式进行展示的实践。TreeView控件在Windows Forms和ASP.NET中广泛使用,它能够以层次结构展示数据,非常...
在C#编程中,递归是一种强大的工具,用于解决那些可以分解为相同或类似子问题的问题。本实例将深入探讨如何使用递归来构建一个树形结构,特别关注于`CreateTree`方法。这个方法通常用于从数据库数据或其他数据源创建...
用c# 递归方法,遍历目录,输入一个路径,能输出此路径下的全部文件和文件夹里的内容
### C# 递归算法获取窗体内各控件的属性 在C#中,递归是一种非常有用的编程技术,尤其适用于处理层次结构的数据。本文将详细介绍如何利用递归算法来获取窗体及其内部所有控件的属性,这在调试、自动化测试或动态...
### C#递归遍历文件夹 递归遍历文件夹是指程序从指定目录开始,自动地访问该目录下所有的子目录以及其中的文件,直到访问完所有层级的所有目录和文件。这种方法常用于文件系统操作、文件搜索、目录结构分析等场景。...
根据给定的信息,本文将详细解释C#中的递归树构建方法,并重点解析如何通过递归函数实现自动化的树形结构构建,包括添加父子节点等操作。 ### 一、递归树的概念 在计算机科学中,树是一种常用的数据结构,它由节点...
以下是一个简单的C#递归函数示例,用于遍历目录: ```csharp public static List<string> FindAllSubdirectories(string path) { var subdirectories = new List(); if (Directory.Exists(path)) { ...
总结来说,实现C#中递归构建zTree的关键在于理解zTree的数据格式,设计合适的C#数据结构,以及使用递归算法处理树的层次关系。通过以上步骤,我们可以高效地生成多级子菜单,满足用户在Web应用中的导航需求。
在编程世界中,递归是一种强大的工具,尤其在C#这样的面向对象编程语言中,它能够简化复杂问题的解决过程。本主题将深入探讨C#中的递归概念及其在Windows Forms(WinForms)应用程序中的应用,这对于初学者来说是极...
c#入门简单代码,适合新手,简单的递归求和实现。 主函数 static void Main(string[] args) { Class1 aa = new Class1(); Console.WriteLine("请输入待求阶乘的数:"); int n = Convert.ToInt32(Console....
在C#编程语言中,递归是一种强大的编程技术,它涉及到函数或方法调用自身来解决问题。本教程将深入探讨如何利用递归来绘制数学图形,尤其是通过递归绘制圆来构造复杂的几何图案。我们将讨论递归的基本原理,C#中的...
编译原理 C# 递归下降分析器 【要求】 1、使用递归下降分析算法分析表达式文法: exp ::= exp addop term | term addop ::= + | - term ::= term mulop factor | factor mulop ::= * | / factor ::= (exp) | number...
本篇将深入探讨如何使用C#的递归方法实现无限级分类。 首先,我们需要理解什么是递归。递归是函数或过程调用自身的一种编程技术,通常用于解决那些可以简化为相同子问题的问题。在无限级分类中,递归可以帮助我们...
### C#递归创建树知识点解析 #### 一、知识点概览 在软件开发中,树形结构是一种常见的数据组织形式,广泛应用于文件系统、菜单系统等场景中。本篇文章将详细探讨如何利用C#语言中的递归技术来构建一个树形结构。...
本示例中的“C# 递归生成树型菜单”着重讲解如何使用递归方法来动态构建一个`TreeView`控件,结合数据库数据,创建可运行的树形菜单。下面我们将详细探讨这个主题。 1. **递归的理解与应用**: 递归是编程中的一个...