分段函数的题目是:
现在用代码将它表现出来:
'''
时间:2019/3/31
P(n)={1 ,n=1
{n^P(n−1) ,n>1
写出求解分段函数的算法。要求:算法中不能出现'+','*','/'符号,并且用递归的思路作答,
写出两种实现方法:递归函数 和 非递归函数
'''
def _pow(n):
if n == 1: return 1
elif n > 1: return pow(n, _pow(n - 1)) # 调用函数自己
print(_pow(4))
题目中要求:算法中不能出现'+','*','/'符号,并且用递归的思路作答,写出两种实现方法:递归函数 和 非递归函数
不能使用+、*、/,这里用递归函数就能很简洁美观的去实现它,当n = 4的时候,实际上题目就是要我们算它的答案,可以看出,这个式子有很明显的层次性和重复性,定义的_pow函数的第三行就是在调用它自己,将_pow(n-1)的返回值作为这一层中n的指数,一直重复到边界n = 1即达到最后一层。
根据这个原理,我们可以去思考计算机解决递归问题的方法
用代码来表现出来:
n = 4 # n的取值最好不要超过4
nubs = [] # 用来存放递归中每一层‘递’的底数
while True:
if n > 1:
nubs.append(n)
n -= 1
else:
nubs.append(1)
while len(nubs) > 1:
now_nub = pow(nubs[-2], nubs[-1])
del nubs[-1]
del nubs[-1]
nubs.append(now_nub)
break
print(nubs[0])
用一个while循环表示递归的重复性,当n = 1的时候达到边界,递归‘递‘结束;然后用一个栈nubs来表示递归的层次性,将每一层产生的中间数放到其中,’归‘的时候进行出栈。
4 | 3 | 2 | 1 |
先是n> 1的时候,依次将底数进栈
4 | 3 | 2 |
然后栈中最后两个元素出栈,做pow(2,1)操作,将结果2重新入栈
262144 |
重复上述’归‘的操作,最后栈中唯一的元素即为分段函数的解
当然在递归函数中这个栈是系统提供的
本文供和我一样的初学者参考