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


目录
相关文章
|
4月前
|
存储 C语言 Python
【Python】学习笔记day3
【Python】学习笔记day3
50 1
|
1天前
|
存储 Python 容器
Python编程基础第二天学习笔记
Python编程的第二天学习是建立在基础概念上的深化和扩展,强调了基本语法、数据类型、控制结构和函数的重要性。通过实践这些概念,可以增强对Python编程语言的理解,并为后续的高级学习打下坚实的基础。继续实践并逐渐探索更复杂的编程任务将有助于巩固和扩展这些基础知识。
13 7
|
3月前
|
BI 测试技术 索引
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-1
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
4月前
|
分布式计算 Python
Python函数式编程学习笔记
高阶函数是能接收另一个函数作为参数的函数,如Python的map()、reduce()和filter()。map()将传入的函数应用到序列每个元素并返回迭代器,如将整数列表转换为字符串列表。reduce()对序列进行累积计算,例如求和。filter()根据给定函数返回的真值保留或丢弃序列元素,常用于筛选。sorted()函数支持自定义排序,如按绝对值或ASCII值排序。此外,还包括返回函数、匿名函数(lambda)、装饰器(用于动态增强函数功能)和偏函数(partial),用于固定函数部分参数,简化调用。
44 1
|
1月前
|
存储 索引 Python
Python学习笔记----列表、元组和字典的基础操作
这篇文章是一份Python学习笔记,涵盖了列表、元组和字典的基础操作,包括它们的创建、修改、删除、内置函数和方法等。
Python学习笔记----列表、元组和字典的基础操作
|
1月前
|
Python
Python学习笔记---函数
这篇文章是一份Python函数学习的笔记,涵盖了使用函数的优势、内置函数的调用、自定义函数的定义、函数参数的不同类型(必须参数、关键字参数、默认参数、可变参数)、有返回值和无返回值的函数、形参和实参、变量作用域、返回函数、递归函数、匿名函数、偏函数以及输入和输出函数等多个函数相关的主题。
|
1月前
|
索引 Python
Python学习笔记----操作字符串
这篇文章是一份Python字符串操作的学习笔记,涵盖了字符串相加、序列相加、字符串长度和字符的查找、统计、分割、连接、替换、去除空白、大小写转换以及判断字符串是否由字母和数字组成等常用方法。
Python学习笔记----操作字符串
|
1月前
|
Python
python学习笔记---流程控制
这篇文章详细介绍了Python中的流程控制,包括选择结构(if、if-else语句、嵌套if语句)和循环语句(while循环、for循环以及for循环与range()函数的使用),以及如何在循环中使用break和continue语句。
python学习笔记---流程控制
|
1月前
|
索引 Python
python学习笔记----必备知识
这篇文章是一份全面的Python学习笔记,涵盖了Python的必备知识,包括语法特点、流程控制、数据类型、运算符、输入输出方法,以及对序列、字符串、正则表达式、函数、面向对象程序设计、模块和包的介绍。
python学习笔记----必备知识
|
4月前
|
前端开发 安全 JavaScript
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
135 0