#coding=utf-8
'''
#题目:打印出如下图案(菱形)
nu = 1 # 开始值
k = 2 # 变量值
while nu >= 0:
print(int((7 - nu) / 2) * ' ' + '*' * nu)
nu += k
if nu == 7:
k = -k
#题目:有一分数序列:2/1 ,3/2 ,5/3 ,8/5 ,13/8 ,21/13... 求出这个数列的前20 项之和。
sum = 0
a = 0
b = 1
for i in range(21):
a, b = b, a+b
sum += b/a
print(b,a,sum-1)
from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
if n
return n
return fib(n-1) + fib(n-2)
print([fib(n) for n in range(16)])
#题目:求 1+2!+3!+...+20! 的和
from functools import lru_cache, reduce
@lru_cache(maxsize=None)
def factorial(n):
if n == 1:
return 1
return n*factorial(n-1)
sum = reduce(lambda x,y: x+y, [factorial(n) for n in range(1, 21)])
print(sum)
#题目:利用递归方法求 5! 。
from functools import lru_cache, reduce
@lru_cache(maxsize=None)
def factorial(n):
if n == 1:
return 1
return n*factorial(n-1)
print(factorial(5))
#题目:利用递归函数调用方式,将所输入的 5 个字符,以相反顺序打印出来。
def str_reverse(n, string):
if n == 0:
return
print(string[n-1])
str_reverse(n-1, string)
string = 'hello'#可替换成input
print(str_reverse(len(string), string))
#题目:有 5 个人坐在一起,问第五个人多少岁?他说比第4 个人大2 岁。问第4 个人岁数,他说比第3 个人大2 岁。问第三个人,又说比第2 人大两岁。
# 问第2 个人,说比第一个人大两岁。最后问第一个人,他说是10 岁。请问第五个人多大?
def get_age(n):
if n == 1:
return 10
return get_age(n-1) + 2
print(get_age(5))
#题目:给一个不多于 5 位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
def num_reverse(n, string):
if n == 0:
return
print(string[n-1])
num_reverse(n-1, string)
num = 123
num = str(num)#如果使用input不用转换,但是需要判断isnumeric()
print(num_reverse(len(num), num))
#题目:一个5 位数,判断它是不是回文数。即12321 是回文数,个位与万位相同,十位与千位相同。
def palindrome(n, num):
if 0 <= n and num[0] == num[-1]:
return print('%s是回文数'%(num_))
palindrome(n-2, num[1:-1])
num = '102343201'
num_ = num
n = len(num)
palindrome(n, num)
#题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
week = input("请输入星期的首字母:")
result = []
def get_week(week):
global result
result =[x for x in weeks if x.startswith(week)]
if len(result) == 1:
return result
elif len(result) == 2:
week += input("请输入星期的下一个字母:")
elif len(result) == 0:
week = input("请重新输入星期的首字母:")
get_week(week)#return 后还要执行这条语句一次
return result
print(get_week(week))
#题目:求一个3*3 矩阵对角线元素之和
a = []
sum = 0
for i in range(3):
a.append([])
for j in range(3):
a[i].append(int(input('请输入第%s行第%s列的元素:' % (i + 1, j + 1))))
print('数组:',a)
for i in range(3):
sum += a[i][i]
print('数组之和:',sum)
#题目:对10 个数进行排序
list_num = [2, 3, 1, 7, 9, 8, 4, 6, 5, 0]
list_num.sort(reverse=False)
print(list_num)
'''
#题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
list_num = [2, 3, 1, 7, 9, 8, 4, 6, 5, 0]
list_num.sort(reverse=True)
a = -1
if list_num[0]-list_num[-1] >= 0:
for i in list_num:
if a 1]:
list_num.append(a)
break
if a > i:
list_num.insert(list_num.index(i), a)
break
else:
continue
else:
for i in list_num:
if a > list_num[-1]:
list_num.append(a)
break
if a
list_num.insert(list_num.index(i), a)
break
else:
continue
print(list_num)
#为什么return i 返回的是 i , 而print(i)得到的是 0
def func(i):
if i == 0:
print(i)
return i
elif i > -2:
i = i-1
func(i)
print(func(3))
有递归的情况:
无递归的情况:
错误的解决方案:
def func(i):
if i == 0:
print(i)
return i
elif i > -2:
i = i-1
func(i)
return(i)
print(func(3))
正确的解决方案一:
def func(i):
if i == 0:
print(i)
return i
elif i > -2:
i = i-1
return(func(i))
print(func(3))
正确的解决方案二:
result = None
def func(i):
if i == 0:
print(i)
global result
result = i
elif i > -2:
i = i-1
func(i)
return result
print(func(3))