“Python函数的递归”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
第1行: 第1行:
 +
==递归的定义==
 
*函数的递归调用是函数调用的一种特殊情况,函数调用自己,自己再调用自己,自己再调用自己,...,当某个条件得到满足的时候就不再调用了,然后再一层一层地返回直到该函数第一次调用的位置。
 
*函数的递归调用是函数调用的一种特殊情况,函数调用自己,自己再调用自己,自己再调用自己,...,当某个条件得到满足的时候就不再调用了,然后再一层一层地返回直到该函数第一次调用的位置。
 +
*[[文件:p5-3.png|700px]]
 
*[[文件:p4-7.png]]
 
*[[文件:p4-7.png]]
 +
*例1:阶乘的计算
 +
<nowiki>def factorial(num):
 +
    if num == 0:
 +
        return 1
 +
    else:
 +
        return num * factorial(num-1)
 +
n = eval(input("请输入一个整数: "))
 +
print(factorial(abs(int(n))))</nowiki>
 +
*例2: 字符串反转
 +
<nowiki>def reverse(s):
 +
    if s == "":
 +
        return s
 +
    else:
 +
        return reverse(s[1:]) + s[0]
 +
str = input("请输入一个字符串: ")
 +
print(reverse(str))</nowiki>
 
*问题解决:使用递归法对整数进行因数分解。
 
*问题解决:使用递归法对整数进行因数分解。
 
  <nowiki>from random import randint
 
  <nowiki>from random import randint

2018年2月17日 (六) 10:40的版本

递归的定义

  • 函数的递归调用是函数调用的一种特殊情况,函数调用自己,自己再调用自己,自己再调用自己,...,当某个条件得到满足的时候就不再调用了,然后再一层一层地返回直到该函数第一次调用的位置。
  • P5-3.png
  • P4-7.png
  • 例1:阶乘的计算
def factorial(num):
    if num == 0:
        return 1
    else:
        return num * factorial(num-1)
n = eval(input("请输入一个整数: "))
print(factorial(abs(int(n))))
  • 例2: 字符串反转
def reverse(s):
    if s == "":
        return s
    else:
        return reverse(s[1:]) + s[0]
str = input("请输入一个字符串: ")
print(reverse(str))
  • 问题解决:使用递归法对整数进行因数分解。
from random import randint

def factors(num, fac=[]):
    #每次都从2开始查找因数
    for i in range(2, int(num**0.5)+1):
        #找到一个因数
        if num%i == 0:
            fac.append(i)
            #对商继续分解,重复这个过程
            factors(num//i, fac)
            #注意,这个break非常重要
            break
    else:
        #不可分解了,自身也是个因数
        fac.append(num)
facs = []
n = randint(2, 10**8)
factors(n, facs)
result = '*'.join(map(str, facs))
if n==eval(result):
    print(n, '= '+result)

返回 Python函数和代码复用