Python学习笔记(8)

简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/3728157 Python学习笔记(8)一、递归函数调用自身,即为递归函数。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/3728157

Python学习笔记(8)



一、递归
函数调用自身,即为递归函数。
例子:
def main():
  message()
def message():
  print 'This is a recursive function.'
  message()
main()

结果:
This is a recursive function.
This is a recursive function.
......
  File "C:/temp/p19.py", line 5, in message
  message()
RuntimeError: maximum recursion depth exceeded

Python解释器规定了递归深度,故运行到一定深度,将报错。

例2:
def main():
  message(5)
def message(times):
  if(times>0):
  print 'This is a recursive function.'
  message(times-1)
main()

结果:
This is a recursive function.
This is a recursive function.
This is a recursive function.
This is a recursive function.
This is a recursive function.

例3:
# This program uses recursion to calculate the factorial of a number.
def main():
  # Get a number from the user.
  number = input('Enter a nonnegative integer:')
  # Get the factorial of the number.
  fact = factorial(number)
  # Display the factorial.
  print 'The factorial of',number,'is',fact
def factorial(num):
  if num == 0:
  return 1
  else:
  return num*factorial(num-1)
main()

结果:
Enter a nonnegative integer:6
The factorial of 6 is 720

二、直接递归和间接递归
间接递归是函数不直接调用自己,而是采用如下形式:
1)函数A调用函数B,函数B调用函数A
2)函数A调用函数B,函数B调用函数C,函数C调用函数A
......
这样的递归才是间接递归。

例:
# The program demonstrates the range_sum function.
def main():
  numbers = [1,2,3,4,5,6,7,8,9]
  my_sum = range_sum(numbers,2,5)
  print 'The sum of items 2 through 5 is',my_sum
def range_sum(num_list,start,end):
  if start>end:
  return 0
  else:
  return num_list[start]+range_sum(num_list,start+1,end)
main()

结果:
The sum of items 2 through 5 is 18

求最大公约数的另一种算法:
def main():
  num1 = input('Enter an integer:')
  num2 = input('Enter another integer:')
   
  print 'The maximum common number:', ywf(num1,num2)
def ywf(a,b):
  c = 1
  if a == 0:
  return b
  if b == 0:
  return a
  if a<b:
  t=a; a=b; b=t
  while(a != b):
  if a%2 == 0 and b % 2 == 0:
  a=a/2; b=b/2; c=c*2
  elif a%2 == 0 and b%2 == 1:
  a=a/2
  elif a%2 == 1 and b%2 == 0:
  b=b/2
  else:
  a=a-b
  if a<b:
  t=a; a=b; b=t
  return c
main()

例:汉若塔问题
# The program simulates the Towers of Hanoi game.
def main():
  # Set up some initial values.
  num_discs = 3
  from_peg = 1
  to_peg = 3
  temp_peg = 2
  # Play the game.
  move_discs(num_discs,from_peg,to_peg,temp_peg)
  print 'All the pegs are moved!'
# The moveDiscs function displays a disc move in the 
# Towers of Hanoi game.
# num: the number of discs to move.
# from_peg: the peg to move from
# to_peg: the peg to move to
# temp_peg: the temporary peg.
def move_discs(num,from_peg,to_peg,temp_peg):
  if(num>0):
  move_discs(num-1,from_peg,temp_peg,to_peg)
  print 'Move a disc from peg',from_peg,'to peg',to_peg
  move_discs(num-1,temp_peg,to_peg,from_peg)
main()


目录
相关文章
|
2月前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
450 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
2月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
173 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
2月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
177 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
2月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
73 1
|
2月前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
121 1
|
2月前
|
索引 Python
Python学习笔记编程小哥令狐~持续更新、、、(上)
Python学习笔记编程小哥令狐~持续更新、、、(上)
53 2
|
2月前
|
存储 Python
Python学习笔记编程小哥令狐~持续更新、、、 (下)
Python学习笔记编程小哥令狐~持续更新、、、 (下)
35 1
|
2月前
|
存储 Python
【免费分享编程笔记】Python学习笔记(二)
【免费分享编程笔记】Python学习笔记(二)
48 0
【免费分享编程笔记】Python学习笔记(二)
|
2月前
|
Java 编译器 Go
Python学习笔记--- day01计算机基础和环境搭建(一)
Python学习笔记--- day01计算机基础和环境搭建(一)
47 2
|
2月前
|
程序员 编译器 Python
Python学习笔记--- day01计算机基础和环境搭建(二)
Python学习笔记--- day01计算机基础和环境搭建(二)
51 1