函数:递归是神马
递归求阶乘
写一个求阶乘的函数
正整数阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。
例如所给的数是5,则阶乘式是1×2×3×4×5,得到的积是120,所以120就是4的阶乘。
def factorial(n):
result = n
for i in range(1,n):
result *= i
return result
number = int(input("请输入一个正整数:"))
result = factorial(number)
print("%d的阶乘是:%d" % (number,result))
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
number = int(input("请输入一个正整数:"))
result = factorial(number)
print("%d的阶乘是:%d" % (number,result))
假设我们n的值传入是5,那么:
factorial(5) = 5 * factorial(4)
factorial(4) = 4 * factorial(3)
factorial(3) = 3 * factorial(2)
factorial(2) = 2 * factorial(1)
factorial(1) = 1
斐波那契数列的迭代实现
我们都知道兔子繁殖能力是惊人的,如下图:
所经过的月数123456789101112
兔子的总对数1123581321345589144
我们可以用数学函数来定义:
1,当n=1
F(n) = 1,当n=2
F(n-1)+F(n-2),当n>2
课间练习:假设我们需要求出经历了20个月后,总共有多少对小兔崽子?(迭代 vs 递归)
def fab(n):
n1 = 1
n2 = 1
n3 = 1
if n < 1:
print('输入有误!')
return -1
while (n-2) > 0:
n3 = n2 + n1
n1 = n2
n2 = n3
n -= 1
return n3
result = fab(20)
if result != -1:
print('总共有%d对小兔崽子诞生!' % result)
def fab(n):
if n < 1:
print('输入有误!')
return -1
if n == 1 or n == 2:
return 1
else:
return fab(n-1) + fab(n-2)
result = fab(20)
if result != -1:
print('总共有%d对小兔崽子诞生!' % result)
递归:汉诺塔
def hanoi(n, x, y, z):
if n == 1:
print(x, ' --> ', z)
else:
hanoi(n-1, x, z, y) # 将前n-1个盘子从x移动到y上
print(x, ' --> ', z) # 将最底下的最后一个盘子从x移动到z上
hanoi(n-1, y, x, z) # 将y上的n-1个盘子移动到z上
n = int(input('请输入汉诺塔的层数:'))
hanoi(n, 'X', 'Y', 'Z')
字典:当索引不好用时
>>> brand = ['李宁' , '耐克' , '阿迪达斯' , '鱼C工作室']
>>> slogan = ['一切皆有可能' , 'Just do it' , 'Impossible is nothing' , '让编程改变世界']
>>> print('鱼C工作室的口号是:', slogan[brand.index('鱼C工作室')])
鱼C工作室的口号是: 让编程改变世界
>>>
创建和访问字典
>>> dict1 = {'李宁':'一切皆有可能' , '耐克': 'Just do it', '阿迪达斯' :'Impossible is nothing', '鱼C工作室':'让编程改变世界'}
>>> print('鱼C工作室的口号是:',dict1['鱼C工作室'])
鱼C工作室的口号是: 让编程改变世界
>>>
>>> dict2 = {1:'one',2:'two',3:'three'}
>>> dict2[2]
'two'
>>>
>>> help(dict)
Help on class dict in module builtins:
class dict(object)
| dict() -> new empty dictionary
| dict(mapping) -> new dictionary initialized from a mapping object's
| (key, value) pairs
| dict(iterable) -> new dictionary initialized as if via:
| d = {}
| for k, v in iterable:
| d[k] = v
| dict(**kwargs) -> new dictionary initialized with the name=value pairs
| in the keyword argument list. For example: dict(one=1, two=2)
|
| Methods defined here:
|
| __contains__(self, key, /)
| True if D has a key k, else False.
|
| __delitem__(self, key, /)
| Delete self[key].
|
| __eq__(self, value, /)
| Return self==value.
|
| __ge__(self, value, /)
| Return self>=value.
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __getitem__(...)
| x.__getitem__(y) <==> x[y]
|
| __gt__(self, value, /)
| Return self>value.
|
| __init__(self, /, *args, **kwargs)
| Initialize self. See help(type(self)) for accurate signature.
|
| __iter__(self, /)
| Implement iter(self).
|
| __le__(self, value, /)
| Return self<=value.
|
| __len__(self, /)
| Return len(self).
|
| __lt__(self, value, /)
| Return self | | __ne__(self, value, /) | Return self!=value. | | __new__(*args, **kwargs) from builtins.type | Create and return a new object. See help(type) for accurate signature. | | __repr__(self, /) | Return repr(self). | | __setitem__(self, key, value, /) | Set self[key] to value. | | __sizeof__(...) | D.__sizeof__() -> size of D in memory, in bytes | | clear(...) | D.clear() -> None. Remove all items from D. | | copy(...) | D.copy() -> a shallow copy of D | | fromkeys(iterable, value=None, /) from builtins.type | Returns a new dict with keys from iterable and values equal to value. | | get(...) | D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None. | | items(...) | D.items() -> a set-like object providing a view on D's items | | keys(...) | D.keys() -> a set-like object providing a view on D's keys | | pop(...) | D.pop(k[,d]) -> v, remove specified key and return the corresponding value. | If key is not found, d is returned if given, otherwise KeyError is raised | | popitem(...) | D.popitem() -> (k, v), remove and return some (key, value) pair as a | 2-tuple; but raise KeyError if D is empty. | | setdefault(...) | D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D | | update(...) | D.update([E, ]**F) -> None. Update D from dict/iterable E and F. | If E is present and has a .keys() method, then does: for k in E: D[k] = E[k] | If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v | In either case, this is followed by: for k in F: D[k] = F[k] | | values(...) | D.values() -> an object providing a view on D's values | | ---------------------------------------------------------------------- | Data and other attributes defined here: | | __hash__ = None >>> >>> dict3 = dict((('F',70),('i',105),('s',115),('h',104),('c',67))) >>> dict3 {'F': 70, 'i': 105, 's': 115, 'h': 104, 'c': 67} >>> >>> dict4 = dict(小甲鱼='编程改变世界',JM='加强各方面知识') >>> dict4 {'小甲鱼': '编程改变世界', 'JM': '加强各方面知识'} >>> >>> dict4['JM'] = '学习编程' >>> dict4 {'小甲鱼': '编程改变世界', 'JM': '学习编程'} >>> >>> dict4['小明'] = '网络安全' >>> dict4 {'小甲鱼': '编程改变世界', 'JM': '学习编程', '小明': '网络安全'} >>> >>> dict1.fromkeys((1,2,3)) {1: None, 2: None, 3: None} >>> dict1.fromkeys((1,2,3),'Number') {1: 'Number', 2: 'Number', 3: 'Number'} >>> >>> dict1.fromkeys((1,2,3),('Number','two','three')) {1: ('Number', 'two', 'three'), 2: ('Number', 'two', 'three'), 3: ('Number', 'two', 'three')} >>> dict1 =dict1.fromkeys(range(32),'赞') >>> dict1 {0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞', 10: '赞', 11: '赞', 12: '赞', 13: '赞', 14: '赞', 15: '赞', 16: '赞', 17: '赞', 18: '赞', 19: '赞', 20: '赞', 21: '赞', 22: '赞', 23: '赞', 24: '赞', 25: '赞', 26: '赞', 27: '赞', 28: '赞', 29: '赞', 30: '赞', 31: '赞'} >>> for eachKey in dict1.keys(): print(eachKey)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>> for eachValue in dict1.values(): print(eachValue)
赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 赞 >>> >>> for eachItem in dict1.items(): print(eachItem)
(0, '赞') (1, '赞') (2, '赞') (3, '赞') (4, '赞') (5, '赞') (6, '赞') (7, '赞') (8, '赞') (9, '赞') (10, '赞') (11, '赞') (12, '赞') (13, '赞') (14, '赞') (15, '赞') (16, '赞') (17, '赞') (18, '赞') (19, '赞') (20, '赞') (21, '赞') (22, '赞') (23, '赞') (24, '赞') (25, '赞') (26, '赞') (27, '赞') (28, '赞') (29, '赞') (30, '赞') (31, '赞') >>> >>> print(dict1[31]) 赞 >>> print(dict1[32]) Traceback (most recent call last): File " print(dict1[32]) KeyError: 32 >>> >>> dict1.get(32) >>> print(dict1.get(32)) None >>> >>> dict1.get(32,'没有') '没有' >>> dict1.get(31,'没有') '赞' >>> >>> 31 in dict1 True >>> 32 in dict1 False >>> >>> dict1 {0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞', 10: '赞', 11: '赞', 12: '赞', 13: '赞', 14: '赞', 15: '赞', 16: '赞', 17: '赞', 18: '赞', 19: '赞', 20: '赞', 21: '赞', 22: '赞', 23: '赞', 24: '赞', 25: '赞', 26: '赞', 27: '赞', 28: '赞', 29: '赞', 30: '赞', 31: '赞'} >>> dict1.clear() >>> dict1 {} >>> dict1 = {} >>> a = {'姓名':'小甲鱼'} >>> b = a >>> b {'姓名': '小甲鱼'} >>> b {'姓名': '小甲鱼'} >>> a = {} >>> a {} >>> b {'姓名': '小甲鱼'} >>> a = b >>> a {'姓名': '小甲鱼'} >>> b {'姓名': '小甲鱼'} >>> a.clear() >>> a {} >>> b {} >>> dir(dict) ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'] >>> >>> a = {1:'one',2:'two',3:'three'} >>> b = a.copy() >>> c = a >>> c {1: 'one', 2: 'two', 3: 'three'} >>> a {1: 'one', 2: 'two', 3: 'three'} >>> b {1: 'one', 2: 'two', 3: 'three'} >>> id(a) 48459920 >>> id(b) 48463736 >>> id(c) 48459920 >>> c[4] = 'four' >>> c {1: 'one', 2: 'two', 3: 'three', 4: 'four'} >>> a {1: 'one', 2: 'two', 3: 'three', 4: 'four'} >>> b {1: 'one', 2: 'two', 3: 'three'} >>> >>> a.pop(2) 'two' >>> a {1: 'one', 3: 'three', 4: 'four'} >>> a.popitem() (4, 'four') >>> >>> a {1: 'one', 3: 'three'} >>> a.setdefault('小白') >>> a {1: 'one', 3: 'three', '小白': None} >>> a.setdefault(5,'five') 'five' >>> a {1: 'one', 3: 'three', '小白': None, 5: 'five'} >>> >>> b = {'小白':'狗'} >>> a.update(b) >>> a {1: 'one', 3: 'three', '小白': '狗', 5: 'five'} >>>