递归函数c语言求分段函数,Python 实现递归函数求解分段函数表达式;并解释递归函数其原理...

分段函数的题目是:

35848c8bb96be0f6850d87bbefd73ba3.png

07e8801127c0101c27ef3a8d32807ba2.png

现在用代码将它表现出来:

'''

时间: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的时候,实际上题目就是要我们算

21858101b9fd64cfe3d9359b2b5a3e34.png它的答案,可以看出,这个式子有很明显的层次性和重复性,定义的_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

重复上述’归‘的操作,最后栈中唯一的元素即为分段函数的解

当然在递归函数中这个栈是系统提供的

本文供和我一样的初学者参考

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值