我正试图在IBasic上做Ackermann的功能

时间:2009-12-10 18:35:59

标签: function

  

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

3 个答案:

答案 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