递归——自己调用自己(上)
递归——自己调用自己
-
递归的定义
1:故事:
大家都听过老和尚讲的故事吧,从前有座山,山上有座庙,庙里有个老和尚,老和尚在讲故事给小和尚听:"从前有座山,山上有座庙,庙里有个老和尚,老和尚在讲故事给小和尚听:'从前座山,山上有座庙,庙里有个老和尚,老和尚在讲故事给小和尚听.........",
这就是生活中一个用递归形成的故事。
2:德罗斯特效应
3:定义:递归(Recursion),是指在函数的定义中又调用函数自身的方法。
递归分为递推、回归两个过程,递推过程把数据不断地压进堆栈,我们知道堆栈是先进后出,当递推到初始条件时,开始回归,调取保存在堆栈中的数据,最好得到所求结果。
-
递归求阶乘
我们知道阶乘的算法,例如求5!=5*4*3*2*1,运用递归即我们要知道5!的值,必需先知道5!——>4!——>3!——>2!——>1!,而所有阶乘的初始条件都为1!=1,此过程称为递推,我们总共递推了4次,知道初始条件1!=1,我们开始回归,1!——>2!——>3!——>4!——>5!,具体步骤如下图所示:
C#:
// private static int jj = 0;// static long Recusion(long n)
long lngReturn = 1;
//(递归结束条件 {
ii++;
第次递推:n=" + n);
lngReturn = n * Recusion(n - 1);
jj++;
第次回归:lngReturn=" + lngReturn);
return lngReturn;
VB.NET:
递归求阶乘
Dim lngReturn As Long = 1
递推次数计数
回归次数计数
Then
Console.WriteLine("" & ii & "n=" & n)
jj += 1
第"lngReturn=" & lngReturn)
Return lngReturn
运行结果显示如下:
使用普通方式求递归:
C#:
{
long lngReturn = 1;
for (int i = 0; i < n; i++)
lngReturn *=(i+1) ;
return lngReturn;
Function P_Recusion(n As Long) As Long
For i = 1 To n
Next
(2):递归的缺点:递归方法的运行效率不高。
-
递归求最大公约数
1:最大公约数:最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。
2:例如求45,30的最大公约数。最常用的即:辗转相除法。即用45/30,若不整除,则用35/(两数的余数),直到余数为0。
C#:
辗转相除法求最大公约法
{
保存较大数,保存较小数
//m<n {
int temp=0;
temp = m;
m=n;
n=temp;
int r = m % n;
两数整数整除,则返回较小数 {
return n;
else//0
return gcd(n, r);
}
VB.NET:
辗转相除法求最大公约数
'mn If (m < n) Then 'm<n Dim temp As Integer = 0
m = n
End If
If (r = 0) Then 'n
Else '0
End If
End Function
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?