C#算法学习-->递归

C#数据结构与算法学习 第一章 绪论 1.数组与链表 数组所分配的存储空间是连续的,所以数组天生就具有实现数据顺序存储结构的能力; 链式存储结构(Linked Storage Structure)是通过数据元素在计算机存储器中的相对位置来表示出数据元素的逻辑关系,一般把逻辑上相邻的数据元素存储在物理位置相邻的存储单元中。 2.实现算法的语言级别越高,其执行效率相对越低。 3.一般而言,编译的执行效率高于解释,但... 阅读详情

示例:

计算数组{1,1,2,3,5,8……} 第30位值


1)不用递归

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();
}

2)改为归递算法

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;
	}	
    	else 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);
    }
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    C#递归的应用是可以让繁琐的问题的变得简单可执行,那么具体的实例就是打开文件的操作,我们知道获得某一目录下第一级的所有文件和文件夹列表,很容易办到:
    DirectoryInfo di=new DirectoryInfo(strBaseDir);//strBaseDir是起始目录,绝对地址 DirectoryInfo[] diA=di.GetDirectories();//获得了所有一级子目录 FileInfo[] fiA=di.GetFiles();//获得了所有起始目录下的文件 
    要是想获得某一目录下的所有文件和目录(包含所有子目录),那该怎么办呢?目录都是一层套一层的,我们不能预知某个目录的深度,只有获得了父节点,才有可能了解子节点,解决这个问题,只有递归这个概念了。
    C#递归的简单理解,它就是一个方法,在这个方法里面,再次调用它本身这个方法,从而描述了某一事物运作的深度…… - - 不废话了,看代码吧:
    C#递归实现代码
    public ArrayList al=new ArrayList(); //我把ArrayList当成动态数组用,非常好用 public void GetAllDirList(string strBaseDir) { DirectoryInfo di=new DirectoryInfo(strBaseDir); DirectoryInfo[] diA=di.GetDirectories();   for(int i=0;i<diA.Length;i++) { al.Add(diA[i].FullName); //diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中 GetAllDirList(diA[i].FullName); //注意:这里使用C#递归的方法 } } 
    最后,如何把所有目录信息从ArrayList中取出来呢?如下:
    for(int i=0;i 0)
    19 {
    20 foreach (DataRow d in dr)
    21 {
    22 TreeNode tNode = new TreeNode();
    23 tNode.Text = d["Name"].ToString();
    24 if (pNode == null)
    25 {
    26 //添加根节点 
    27 TreeView1.Nodes.Add(tNode);
    28 }
    29 else
    30 {
    31 //添加当前节点的子节点 
    32 pNode.ChildNodes.Add(tNode);
    33 tNode.Collapse();
    34 }
    35 AddTree(d["Num"].ToString(), tNode); //递归 
    36 }
    37 }
    38 }
    39 
    ===========================================================================================
    SQL的递归查询
    create procedure GetData(@a nvarchar(50))
    as
    begin
    create table #Temp(
    a nvarchar(50),
    b nvarchar(50),
    c nvarchar(50)
    )
    declare @tempB nvarchar(50)
    insert into #Temp select a,b,c from T where a in(@a)
    declare cur cursor for select b from #Temp
    open cur
    fetch next from cur into @tempB
    while @@fetch_status = 0
    begin
    insert into #Temp select a,b,c from T where a in(@tempB)
    fetch next from cur into @tempB
    end
    close cur
    deallocate cur
    select * from #Temp
    end
    =====================================================
    上面的是假设表结构如下的:
    a b c
    =========================
    1 2 aa
    1 3 dfd
    2 4 fdas
    3 5 fds
    4 7 fds
C#笔试题面试题锦集 .NET面试题 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。 2 .列举ASP.NET 页面之间传递值的几种方式。 答. 1.使用QueryString, 如…?id=1; response. R 阅读详情

相关推荐

【Unity 05】C# 基础算法

PS:本系列笔记将会记录我此次在北京学习Unity开发的总体过程,方便后期写总结,笔记为天更。 笔记内容均为 自己理解,会有遗漏处,不保证每个都对,仅供参考 基础算法会陆续更新,遇到就会更新 Part 1 排序算法: 所采用的数组均为: int[] array_ListA = { 12, 15, 13, 0, 9, 4, 8, 11, 33, 22, 12 }; //定义一个一维数组 冒泡排序:...

不积跬步,无以至千里 679

C#经典算法面试题

C#经典算法面试题; 1.使用递归算法来实现计算1+2+3+4+…+100的结果; 2.实现一个冒泡排序算法(升序); 3.实现一个方法,对于输入的任意字符串,统计出其中每一种字符出现的次数; 4.实现一个将字符串转换为整数的方法,不要使用int.Parse、int.TryParse、Convert.ToInt32等任何类库方法; 5.一列数的规则如下 : 1 、 1 、 2 、 3 、 5 、 8 、 13 、 21 、 34...... 求第 30 位数是多少, 用递归算法实现;

视觉软件 5509

C#:实现计算1+2+3+4+…+100算法(附完整源码)

C#:实现计算1+2+3+4+…+100算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1969

c#使用递归算法来实现计算1+2+3+4+…+100的结果

c#使用递归算法来实现计算1+2+3+4+…+100的结果

qq_64639187的博客 2047

C#实现决策树算法详解与递归构建实战

决策树不仅是算法,更是一种思维方式:把复杂问题分解成一系列简单的“是/否”判断。我们从信息熵出发,理解了纯度的数学本质;用信息增益驱动特征选择;用 C# 构建了完整的数据结构和算法;最后用剪枝驯服了过拟合这头猛兽。虽然 ID3 本身已较少用于生产,但它的思想——可解释性、贪心划分、递归构建——深刻影响了 C4.5、CART、随机森林乃至 XGBoost。下次当你看到一个“如果…则…”的规则系统,不妨想想:它的背后,是不是也藏着一棵小树呢?🌳💚。

weixin_35750953的博客 676

C#实现汉诺塔游戏完整源码与递归算法解析

set;set;set;set;set;return $"[步骤 {Step}] 移动第 {DiskNumber} 号圆盘:{From} → {To} ({Timestamp:HH:mm:ss})";结构化信息便于后续分析、导出、筛选。再加个回放功能:Console.WriteLine("开始回放...");Console.WriteLine("按任意键继续...");还能保存到文件:Console.WriteLine("记录已保存!");

weixin_33816734的博客 452

通过递归方法更改对象中的属性值

通过递归方法更改对象属性的值

2201_75705263的博客 1035

C#初学者算法小例子:求1+2+3+.....100的和

内容索引:C#源码,算法相关,算法  C#求1+2+3+.....100的和,初学者算法小例子,记得在上大学时的计算机C语言课上,就经常遇到让计算数列的编程题,累加变量赋初始值、累加求和,很是头疼,总觉得这种东西没什么用处,现在才知,以前的基础知识对现在是多么重要埃

【查找算法】二分查找(C# + 递归、非递归和变种形式)

本文主要介绍二分查找算法,通过图片解析每一次查找的情况。代码通过C#实现,分别有递归、非递归和变种三种形式。其中变种主要**解决数组出现重复数据**的问题。最后,我们还分析了二分查找的局限性。...

baidu_33146219的博客 2万+

风光储互补微电网在偏远地区的应用实践:从建模到仿真全解析

本文深入解析了风光储互补微电网在偏远地区的应用实践,从系统设计到仿真建模全流程。通过Simulink等工具进行动态仿真,验证了系统在多种工况下的可靠性,并结合实际案例展示了其显著的经济和环保效益。文章为从业者提供了从技术路径到实施优化的全面指导。

weixin_29047545的博客 270

【scp】Windows 下scp报错 bad permissions

Windows 下使用 SSH 连接报 Bad owner or permissions on C:\\Users\\Administrator/.ssh/config 错误问题解决 C:\Users\Administrator>scp -P 66666 D:\1111.pdf zzd@58.213.45.xx:/home/zzd/ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING:...

走在搬砖的路上! 4154

【递归算法】递归算法的快速入门

本文主要介绍了递归的基本概念、应用场景和原则。

baidu_33146219的博客 1万+

人形机器人人机交互解决方案(2026完整版)

《人形机器人人机交互解决方案(2026完整版)》摘要 本项目针对2026年人形机器人产业爆发式增长需求,提出了一套完整的人机交互解决方案。方案包含十大核心模块(语音识别、情感识别、手势识别等),采用五层架构设计,实现多模态融合交互,响应时间≤32ms,准确率≥99%。覆盖制造业巡检、家庭服务等10大场景,适配20+主流机型。项目总投资4.1亿元,预期年营收8.2亿元,将申请专利120项,培养专业人才300人。通过技术创新解决当前交互体验生硬、安全可控性不足等痛点,助力我国人形机器人产业实现从"跟跑

随读手记 776

C#学习笔记——递归方法

在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法。递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。递归算法解决问题的特点:(1) 递归就是在过程或函数里调用自身。(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。

2301_76764954的博客 1206

5分钟搞定kkFileView 4.4.0 Docker部署:小白也能上手的完整配置流程

本文提供了一份针对kkFileView 4.4.0版本的Docker部署完整指南。通过使用预构建的Docker镜像,即使是新手也能在5分钟内完成文件预览服务的搭建,涵盖从环境准备、镜像拉取、容器启动到服务验证的全流程,并分享了进阶配置与生产环境优化建议。

mango的博客 526

部署OpenClaw(ClawdBot、MoltBot)后访问localhost:18789报1008错误怎么办?

部署openclaw(曾用名ClawdBot、MoltBot)后访问localhost:18789出现1008授权错误❌?本文分享如何快速解决这个问题✅

XiaoqiangClub的博客 1万+

算法与数据结构面试宝典——迭代与递归详解与示例(C#,C++)

迭代是一种通过循环语句来重复执行某个操作直到满足特定条件的算法实现方式。它通常用于实现线性、顺序的处理逻辑。迭代的过程中,变量会逐步改变,直到找到解决问题的答案。迭代和递归是算法设计中两种基本的实现方式,它们在解决计算机科学问题中扮演着重要角色。掌握这两种方法,对于面试来说是非常关键的。通过深入理解迭代和递归的原理,以及它们在实际问题中的应用,可以更好地准备面试中的算法和数据结构问题。同时,关注算法和数据结构的发展趋势,可以帮助我们保持知识的更新,适应未来技术的发展。

qq_35320456的博客 1728

paddle 43 用onnxruntime实现ppyoloe模型的部署(含python和c++版本)

PP-YOLOE+是PP-YOLOE模型的升级版,PP-YOLOE+_l在COCO test-dev2017达到了53.3的mAP, 同时其速度在Tesla V100上达到了78.1 FPS。PP-YOLOE+_s/m/x同样具有卓越的精度速度性价比。paddle官方只给出了基于paddle框架的部署案例,为了更好的部署,为此实现将paddle模型转换为onnx模型,然后在python下实现onnxruntime部署。后续会补充c++ onnxruntime部署

a486259的博客 1915

C#入门学习笔记 #3(基本元素、类型、变量、方法、算法)

本文分享了C#学习笔记的要点,包括基本元素(关键字、操作符、标识符等)、命名规范、类型与变量、方法的概念。特别介绍了var关键字的使用建议,并通过简单算法示例(循环和递归)演示了编程思想。文章强调实践的重要性,建议初学者结合实际代码练习来巩固知识,未来将持续更新更多C#内容和算法题解。笔记风格简洁实用,旨在帮助读者快速掌握C#基础。

m0_73612206的博客 797

30. 用GPT-4自动生成测试用例的完整流程

利用GPT - 4生成测试用例面临的主要问题包括:如何准确地将软件需求转化为GPT - 4能够理解的输入提示,以确保生成的测试用例覆盖所有关键功能;如何评估生成的测试用例的有效性和充分性;如何处理生成的测试用例中的错误或不合理之处;以及如何将生成的测试用例集成到现有的测试框架中。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 472

YOLO11改进|注意力机制篇|引入MLCA轻量级注意力机制

YOLO11中添加MLCA轻量级注意力机制

A1983Z的博客 4054

用非递归方法实现递归算法时_学习递归的另一种方法

用非递归方法实现递归算法时 每个学期,我都会通过一项调查,以获取有关我的教学的一些反馈。 上学期终于有人给我写一篇新文章的想法。 特别是,他们想了解有关递归的更多信息,所以我认为我会综合一些技巧。 递归概述 对于那些可能是第一次学习递归的人,我想我会提供一些有关概念的概述。 特别地,递归是一种依赖于解决较小子问题的问题解决技术。 换句话说,不是继续直接解决问题,而是继续分解问题,直到找...

danpu0978的博客 1249

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【C#算法实现】用递归函数和栈将栈元素逆序

本文用C#实现了《程序员代码面试指南》中的如何仅用递归函数和栈操作逆序一个栈。

qq_44951699的博客 785

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C#算法完整教程专栏完整目录

C#算法完整教程专栏完整目录

希望我的博客,能帮上你解决学习中工作中所遇到的问题 3020

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

斐波那契数列(递归与非递归算法)

斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。 学习递归算法的时候一般都会了解这个数列,以此作为例子来研究。 我学习算法这些也都是自学,所以第一次接触递归并不是

在路上 7771

C#,.NET常见算法

【代码】C#,.NET常见算法。

房东的猫的博客 1366
上一篇: C#使用ListView动态添加数据屏幕闪烁的解决方法之一
下一篇: C# 多线程协同完成一个任务
skywshing
博客等级 码龄17年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值