没有合适的资源?快使用搜索试试~ 我知道了~
首页递归子程序计算ackermann函数ACK(m,n)
试编写一段递归子程序计算ackermann函数ACK(m,n)。对于m≥0和n≥0的ACK(m,n)函数定义如下: ACK(0,n)=n+1 ACK(m,0)=ACK(m-1,1) ACK(m,n)=ACK(m-1,ACK(m,n-1)) 程序要求: ⑴ m、n在主程序从键盘输入,输入错误显示“m和n输入错误”。 ⑵ 显示计算结果。
资源详情
资源评论
资源推荐

题目:试编写一段递归子程序计算 ackermann 函数 ACK(m,n)。对于
m≥0 和 n≥0 的 ACK(m,n)函数定义如下:
ACK(0,n)=n+1
ACK(m,0)=ACK(m-1,1)
ACK(m,n)=ACK(m-1,ACK(m,n-1))
程序要求:
⑴ m、n 在主程序从键盘输入,输入错误显示“m 和 n 输入错误”。
⑵ 显示计算结果。
算法设计:
递归函数 ACK(m,n)编写成子程序比较简单清晰。
当 m>0,n>0 时,根据函数定义问题转化为求 m 和 n-1 的 ack 函数如果
n-1 仍大于 0 则递归调用,使 n 再减 1 一直到 n=0 时函数关系就变为
ACK(m,0)= ACK(m-1,1)。
如果我们把含有参数 m,n 的数据结构用伪操作 struc 定义为一个结构的
话,则在对 ack 子程序的递归调用过程中在堆栈中形成了 n 帧含有 m-1 和 1 的
结构数据。根据 ack(0,n)=n+1,即可求得中间结果 result=n+1。
在程序嵌套退出过程中,对每帧结构中 m,n 仍按 ack 函数的三个递归公
式来处理
算法流程图:

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论4