Ackermann函数是一种递归数学算法,可用于测试计算机执行递归的程度。设计一个函数
ackermann(m,n)
,它解决了Ackermann的函数问题。在函数中使用以下逻辑:If m = 0, then return n + 1 If n = 0 then return ackermann(m-1, 1) Otherwise, return ackermann(m-1, ackermann(m, n-1))
程序在点击13后停止。任何人都可以告诉我我做错了什么?
declare main()
declare ackermann(m:int, n:int)
openconsole
main()
print:print "Press any key to quit...",
do:until inkey$<>""
closeconsole
end
sub main()
def counter, m, n:int
counter = 0
for counter = 1 to 100
print ackermann(counter)
next counter
return
sub ackermann(m, n)
if m = 0
return = n + 1
else
if n = 0
return = ackermann(m - 1, 1)
else
return = ackermann(m - 1, ackermann(m, n - 1))
endif
endif
return
答案 0 :(得分:1)
您的打印声明
print ackermann(counter)
但你的功能是
sub ackermann(m, n)
您需要在第一次通话中发送第二个参数。
答案 1 :(得分:1)
请注意Ackermann的功能快速增长 - 超过m,n的值> (3,4)会有很多数字,如果你的数字超过(4,4),你很快就能找到很可能完全用数字填满你记忆的数字......
请参阅to Wikipedia以查看您尝试计算的数字的大小......
答案 2 :(得分:0)
declare main()
declare ackermann(m:int, n:int)
openconsole
main()
print:print "Press any key to quit...",
do:until inkey$<>""
closeconsole
end
sub main()
print Ackermann(3,5)
return
sub ackermann(m, n)
if m = 0
return = n + 1
else
if n = 0
return = ackermann(m - 1, 1)
else
return = ackermann(m - 1, ackermann(m, n - 1))
endif
endif
return