pascal遞迴函式計算ackerman函式值

2021-05-05 03:56:03 字數 644 閱讀 2727

1樓:匿名使用者

兩個問題:

1、integer太小了,資料早就爆了;

2、棧的呼叫過頭了,「exitcode = 201」的意思就是棧溢位。

事實上,阿克曼函式的值是極大的。

ackermann(0,n)=n+1

ackermann(1,n)=n+2

ackermann(2,n)=2*n+3

ackermann(3,n)=2^(n+3)-3ackermann(4,n)=2^2^2^……^2-3,乘冪中共有n+3個2。

當m≥4,ackermann函式的增長快得驚人。ackermann(4,0)=13,ackermann(4,1)=65533,ackermann(4,2)=2^65536-3有19729位,而ackermann(4,3)則即使是位數也不易估計。ackermann(5,0)=65533,ackermann(5,1)=ackermann(4,65533)……

針對於小資料,你的程式沒問題。

2樓:破天一彈

lz 把 integer 換成 int64 再試試。。再不行就麻煩點用高精度

3樓:匿名使用者

把integer換成longint, int64,再不行就只好用高精度了

函式遞迴問題,函式遞迴問題

有用。遞迴的概念尤其是在程式設計領域很實用,舉個簡單的例子 比如你要搜尋某個路徑下面所有的 或者 檔案,那麼你就要用到遞迴,因為你搜尋的路徑下面既有資料夾又有檔案。比如搜某個資料夾下面的檔案函式為searchfile string path 那麼在這個函式實現裡面遇到新的資料夾,就得再次呼叫函式se...

pascal行內函數如何使用

樓上說的不是遞迴呼叫?我說簡單點 程式首部加上,然後在要內聯的函式後加上inline 例如 var a,b longint function max a,b longint longint inline begin if a b then exit a else exit b begin read ...

遞迴函式呼叫函式自己時,後面的命令跟著執行還是最後執行

直接返回if判斷num 10,到全部完成後,再返回執行2 不會執行語句2 知道遞迴呼叫結束退出後才會執行語句2 在c語言的遞迴函式中,函式前的語句是在最後反過來執行,還是在呼叫語句前就執行呢?d n 10 k 肯定在每次呼叫dtos前執行,k在main 外定義,是全域性變數,預設賦值0 每次呼叫都執...