目录
1.打印菱形
栈(Stack)是只允许在一端进行插入或删除操作的线性表。http://t.csdn.cn/STtlh
1.打印几行
2.每一行打印几个空格,几个星星
3.前几行打印之前加入到栈,利用栈的后进先出原则打印后几行的内容
def diamond(n):
stack=[]
for i in range(1,2*n):
if i<=n:
p_str=' '*(n-i)+'*'*(2*i-1)
if i != n:
stack.append(p_str)
print(p_str)
else:
print(stack.pop())
diamond(5)#打印边长为5的菱形
2.深入理解递归函数
递归函数就是一个函数在他的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。(递归函数必须有结束条件)
结合栈的知识
def p(n):
if n==0:
return
print('递归前->',n)
p(n-1)
print('递归后->',n)
p(5)
3. 斐波那契数列
斐波那契数列又称黄金分割数列,因以兔子繁殖为例而引入,故又称“兔子数列”,指的是这样一个数列:1,1,2,3,5,8,13,21,34...f(n)=f(n-1)+f(n-2)
def fib(n):
if n<=2:
return 1
return fib(n-1)+fib(n-2)
print(fib(10))
4. 递归阶乘求和
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数之积,0的阶乘为1
f(n)=n*f(n-1)
def factor(n):
if n<=2:
return 1
return n*factor(n-1)
s_sum=0
for i in range(1,11):
s_sum+=factor(i)
print(s_sum)
5.因子之和“完数”
因子就是所有可以整除这个数的数字,包括1但不包括这个数自身。比如8的因子有1,2,4
一个数如果恰好等于他的因子之和,这个数就称为完数
要求打印1000以内的完数
def factor(n):
s_sum=0
for i in range(1,n):
if n%i==0:
s_sum+=i
return s_sum
for j in range(1,1000):
if j==factor(j):
print(j)