首页 > 编程知识 正文

史宁中基本概念与运算法则(什么是递归算法)

时间:2023-05-06 03:47:51 阅读:83574 作者:3346

递归算法(recursion algorithm )是指在计算机科学中,通过将问题反复分解成同种子问题来解决问题的方法。 递归方法可用于解决许多计算机科学问题,因此是计算机科学中非常重要的概念。 大多数编程语言支持函数的自调用,在这些语言中,函数可以通过调用自身来递归。 因为计算理论可以证明递归的作用完全代替了循环,所以很多函数编程语言,例如Scheme中习惯用递归来实现循环。 递归算法可以简化代码,提高程序的可读性,但不合理的递归可能会降低程序的执行效率。

递归算法思想

递归算法是指在程序运行中不断调用自身来解决问题的方法,通过不断调用自身来解决的问题分为同一问题的子问题,可以通过多次调用来解决。

递归调用是指在他的函数中调用自己的函数的方法,这样的函数也称为递归函数。 在递归函数中,主函数又是被调函数。 执行递归函数反复调用自己,每次调用时依次进入新层次。

递归分为以下两种情况:

直接调用:在函数内调用函数本身的间接调用:间接调用函数。 举例来说,fun_a会呼叫fun_b,而fun_b会呼叫fun_a。 一般不怎么用。 要编写递归函数,必须使用if语句,并在未执行递归调用之前返回。 否则,函数调用递归后,他将陷入死锁。 这是最容易犯的错误。

递归三要素

明确递归结束条件并给出递归结束时的处理方法,有利于提取具有相同问题的子问题,从而减小问题的规模。 代码清晰简洁,可读性强

优点:大多数递归没有大幅减少代码模块和节省内存空间,递归方式的执行速度往往比非递归慢。

可以递归运行的大多数程序都可以非递归运行。

使用

示例

最简单的递归的问题之一是阶乘的计算,阶乘的利用式可以如下记述

将问题分解为同一问题的子问题,表示的阶乘后,阶乘可以表示为

同样,程序可以递归和非递归编写。

从时间导入*

# #非递归方式

联想集团(n ) :

ans=1

财富:

if i==0:

ans=1

else:

ans=ans*(i 1)

返回和

# #递归方式

deffact(n ) :

if n=1:

返回1

else:

ans=n*fact(n-1 ) )

返回和

if __name__=='__main__':

n=int (输入(请输入'请求阶乘的整数: ' )

begintime=time (

是fa=否fact (n )。

结束时间=时间(

print (非递归计算结果为:(fa ) .格式(fa=fa ) ) ) ) ) ) ) ) ) ) ) ) ) )。

打印(非递归地:(ti ) ) .格式) ti=结束时间-开始时间() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。

begintime=time (

是fa=fact(n )

结束时间=时间(

print ('递归计算结果为:(fa ) ) .格式(fa=fa ) ) )

print (递归为: { ti }.format (ti=结束时间- begin time ) ) ) ) ) ) ) ) ) )程序的执行结果为

只有在足够大的时候才能区分时间的差异。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。