“Python函数的递归”的版本间的差异
来自CloudWiki
(→递归的定义) |
|||
第19行: | 第19行: | ||
str = input("请输入一个字符串: ") | str = input("请输入一个字符串: ") | ||
print(reverse(str))</nowiki> | print(reverse(str))</nowiki> | ||
+ | |||
+ | *例3:使用递归,求斐波那契数列 | ||
+ | <nowiki># Filename : test.py | ||
+ | # author by : www.runoob.com | ||
+ | |||
+ | def recur_fibo(n): | ||
+ | """递归函数 | ||
+ | 输出斐波那契数列""" | ||
+ | if n <= 1: | ||
+ | return n | ||
+ | else: | ||
+ | return(recur_fibo(n-1) + recur_fibo(n-2)) | ||
+ | |||
+ | |||
+ | # 获取用户输入 | ||
+ | nterms = int(input("您要输出几项? ")) | ||
+ | |||
+ | # 检查输入的数字是否正确 | ||
+ | if nterms <= 0: | ||
+ | print("输入正数") | ||
+ | else: | ||
+ | print("斐波那契数列:") | ||
+ | for i in range(nterms): | ||
+ | print(recur_fibo(i))</nowiki> | ||
+ | |||
*问题解决:使用递归法对整数进行因数分解。 | *问题解决:使用递归法对整数进行因数分解。 | ||
<nowiki>from random import randint | <nowiki>from random import randint |
2018年4月7日 (六) 07:56的版本
递归的定义
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))
- 例3:使用递归,求斐波那契数列
# Filename : test.py # author by : www.runoob.com def recur_fibo(n): """递归函数 输出斐波那契数列""" if n <= 1: return n else: return(recur_fibo(n-1) + recur_fibo(n-2)) # 获取用户输入 nterms = int(input("您要输出几项? ")) # 检查输入的数字是否正确 if nterms <= 0: print("输入正数") else: print("斐波那契数列:") for i in range(nterms): print(recur_fibo(i))
- 问题解决:使用递归法对整数进行因数分解。
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)