python的递归算法学习(1)

递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示,可以看出:
fact(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fact(n-1) * n
所以,fact(n)可以表示为 n * fact(n-1),只有n=1时需要特殊处理。
于是,fact(n)用递归的方式写出来就是:

def fact(n):
if n==1:return 1
return n * fact(n - 1)

如果要计算2的n次方,那就是:

def fact(n):
if n==1:return 1
return 2 * fact(n - 1)

 

我们可以修改一下代码,详细的列出每一步(注意打印出来的内容的顺序哦):

def fact(n):print("factorial has been called with n = " + str(n))if n == 1:return 1else:res = n * fact(n - 1)print("intermediate result for ", n, " * fact(", n - 1, "): ", res)return resprint(fact(10))

结果是:

C:\Python35\python.exe C:/pylearn/bottlelearn/4.py
factorial has been called with n = 10
factorial has been called with n = 9
factorial has been called with n = 8
factorial has been called with n = 7
factorial has been called with n = 6
factorial has been called with n = 5
factorial has been called with n = 4
factorial has been called with n = 3
factorial has been called with n = 2
factorial has been called with n = 1
intermediate result for  2  * fact( 1 ):  2
intermediate result for  3  * fact( 2 ):  6
intermediate result for  4  * fact( 3 ):  24
intermediate result for  5  * fact( 4 ):  120
intermediate result for  6  * fact( 5 ):  720
intermediate result for  7  * fact( 6 ):  5040
intermediate result for  8  * fact( 7 ):  40320
intermediate result for  9  * fact( 8 ):  362880
intermediate result for  10  * fact( 9 ):  3628800
1814400000Process finished with exit code 0

进一步思考,如果,我们想实现递归的效果,但是,却不想用到递归,在python怎么实现呢:

def fact(n):result=1for i in range(2,n+1):result=result*ireturn resultprint(fact(1))
print(fact(2))
print(fact(10))

 

转载于:https://www.cnblogs.com/aomi/p/7047341.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是方法重写

方法重写: 概念: 子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。 方法重写的应用场景&#xff1…

计算机数学基础 视频讲解,计算机数学基础课件

《计算机数学基础课件》由会员分享,可在线阅读,更多相关《计算机数学基础课件(37页珍藏版)》请在人人文库网上搜索。1、计算机科学的数学基础,第一章:语言与正规语言,1.1 符号、符号串及其运算,符号和符号串在形式语言中是非常重要的基本概念…

C#缓存absoluteExpiration、slidingExpiration两个参数的疑惑

看了很多资料终于搞明白cache中absoluteExpiration,slidingExpiration这两个参数的含义。absoluteExpiration:用于设置绝对过期时间,它表示只要时间一到就过期,所以类型为System.DateTime,当给这个参数设置了一个时间时…

测试显卡cpu中文软件,显卡信息检测工具(GPUinfo)

国内比较牛的显卡识别软件,是gpu-z等多不能比的,可以显示硬件信息BIOS版本驱动信息显存类型频率信息。相关软件软件大小版本说明下载地址Gpuinfo-国内比较牛的显卡识别软件,是gpu-z等多不能比的,可以显示硬件信息 BIOS版本 驱动信…

Java代码块的基本使用

概念: 在Java中,使用 { } 括起来的代码被称为代码块 局部代码块: 位置: 方法中定义 特点:执行完就会在内存中消失 作用: 限定变量的生命周期,及早释放,提高内存利用率 public static void main(String[] ar…

Python 简易图形界面库easygui 对话框大全

easygui 安装 C:\> pip install easygui Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting easygui Using cached https://pypi.tuna.tsinghua.edu.cn/packages/8e/a7/b276ff776533b423710a285c8168b52551cb2ab0855443131fdc7fd8c16f/easygui-…

计算机绘图模型的参数方程,关于曲线绘图与运动控制问题的研究.doc

文档介绍:关于曲线绘图与运动控制问题的研究姓名:张硕朱聪聪禹雪珂学号:201722060220172106102017210609专业:研究生组题目:关于曲线绘图与运动控制问题的研究摘要随着计算机的广泛应用,计算机辅助绘图在当今社会已成为计算机辅助设计的基础。本文的建模题目就是利用…

MathSystem

Math: 概述: Math 包含执行基本数字运算的方法 调用方式: Math类中无构造方法,但内部的方法都是静态的,可以通过 类名.进行调用 常用方法: 方法名 方法名说明public static int abs(int a)返回参数的绝对…

包的引入(base版本)

1 #author F2 3 import os4 import sys5 print(__file__) #相对路径6 print(os.path.abspath(__file__)) #绝对路径7 print(os.path.dirname(os.path.abspath(__file__)))8 print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))9 BASE_PATH os.path.dirname(o…

魔兽8.0玩家最多服务器,魔兽世界8.0一上线玩家就挤爆服务器!然而暴雪还藏2个大招在后面...

这两天,《魔兽世界》凭着新版本“争霸艾泽拉斯”出尽了风头,疯狂的玩家们甚至挤爆了游戏的服务器。而8.0版本的质量倒是对得起玩家的期待:除了劲爆的剧情之外,以海岛探险和战线争霸为首的一众玩法也都相当有创意,魔兽争霸高清重制…

ObjectObjects

Object 概念: Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类,换句话说,该类所具备的方法,所有类都会有一份 toString: 作用:以良好的格式&#…

一个成功的研发团队应具备的9大属性

原文链接 1.自动化是关键研发过程中,很多工作步骤枯燥耗时,具有较强的重复性或规律性,研发人员往往考虑会将这部分内容用自动化代替,如此一来,团队就可以把更多时间投入在核心工作和更有创造性的任务上。例如&#xff…

cod16 服务器正在维护,使命召唤16玩不了怎么办 使命召唤16进不去解决方法

使命召唤16进不去怎么办?不少玩家朋友们在登入游戏界面的时候会出现各种弹窗或无法运行的情况,下面我们就来分享下使命召唤16玩不了解决方法汇总,希望对出现的游戏运行问题的玩家们有所参考。使命召唤16玩不了解决方法:DX发生错误…

服务器里怎么更改网站图片大小,php实现在服务器端调整图片大小的方法

本文实例讲述了php实现在服务器端调整图片大小的方法。分享给大家供大家参考。具体分析如下:在服务器端完成图片大小的调整,会比在浏览器的处理有很多的好处。本文介绍了PHP如何在服务器端调整图片大小。代码包括两部分:① imageResizer() is…

分布式架构系列目录

1、大数据系列|Flume的架构和环境安装 2、大数据系列|Sqoop概念和环境安装 3、大数据系列|Sqoop1的核心命令 4、大数据系列|Vmware虚拟机中安装centos7 5、大数据系列|Vmware下Linux的虚拟机增加磁盘空间 6、大数据系列|Hive架构和工作原理转载于:https://www.cnblogs.com/abc8…

css高清动图,CSS3+PNG实现GIF动画效果

昨天讲到了JavaScriptPNG模拟GIF动画,今天教大家用css3 PNG实现GIF动画效果。代码很简单主要用到了css3的animation属性,代码如下:-webkit-keyframes loading{0%{-webkit-transform: rotate(0deg);}50%{-webkit-transform: rotate(180deg);}…

soapUI-JDBC Request

1.1.1 JDBC Requet 1.1.1.1 概述 – JDBC Request Option Description JDBC Request TestStep Toolbar 对JDBC Request TestStep的总体控制 Parameters Toolbar 控制JDBC请求TestStep参数 Parameters Table 运行查询时要替换的参数表 Configured JDBC Connection …

梦幻西游手游服务器维护公告,梦幻西游手游3月7日全区全服维护更新公告

为保证服务器的运行稳定和服务质量,梦幻西游手游将于3月7日8:00停机,进行维护工作。预计维护时间为8:00~9:00。如果在预定时间内无法完成维护内容,开机时间也将继续顺延。请各位玩家相互转告,并提前留意游戏时间&#…

06_使用开源项目提交参数

1231312转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/7076134.html

可变参数不可变集合

可变参数: 可变参数:就是形参是可以变化的,很灵活,不需要提前定义好具体的数据,可变参数的变量底层是一个数组 格式: public static int sum(数据类型...变量名) {}注意事项: 如果方法里有多个…