🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

1回答

1505閲覧

アッカーマン関数の解を求めたい

naru2001

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

1クリップ

投稿2019/10/13 13:55

アッカーマン関数の解をPythonで求めようとしています。実装は以下のようにしました。

Python

1import sys 2sys.setrecursionlimit(10**6) 3 4ack=[[-1]*10000 for _ in range(10000)] 5ack[0][0]=1 6 7def solve(m,n): 8 if ack[m][n]!=-1: 9 return ack[m][n] 10 if m==0: 11 ack[0][n]=n+1 12 return ack[0][n] 13 elif n==0: 14 ack[m][0]=solve(m-1,1) 15 return ack[m][0] 16 else: 17 ack[m][n]=solve(m-1,solve(m,n-1)) 18 return ack[m][n] 19 20_m,_n=map(int,input().split()) 21print(solve(_m,_n))

このコードでは(m,n)=(3,10)あたりまでは求まったのですがその後は何も出力することなくプログラムを終了させてしまいます。できれば(m,n)=(4,1)を出力させたいと思っています。
実際に試したところsolve(4,1)=solve(2,4268~4270)あたりで強制に終わらせていて、再帰制限に引っ掛かっているようではないです。

こういうのは初めてなので何がどうなっているのか全く分かりません、何かわかる方いましたら宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Windowsでやってみましたが、リターンコードC00000FDで終了します。
ググってみると、スタックオーバーフローのようです。

投稿2019/10/13 14:23

otn

総合スコア85893

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naru2001

2019/10/13 14:47

ありがとうございます。 リターンコードというのが調べても良く分からなかったのですが、再帰制限を増やしたところで環境内のメモリがダメなら意味ないよっていう感じですか? 再帰制限を増やしても結果が変わらなかったのでこれなら納得できます。
otn

2019/10/13 14:56

リターンコードは、コマンドプロンプトからスクリプトを実行直後、echo %ERRORLEVEL%するとわかります。十進数で表示されるので、calcで16進変換します。 C00000FDでググると、Visual Studioに含まれるeditbinコマンドで、python.exeのスタックサイズを変更できるようです。
naru2001

2019/10/13 15:27

pythonのhex()だと違う値が出て困ってましたが別サイトではちゃんと出ました、あらかじめ実行環境を書いてなかったのですが。どうやらVScodeではスタックサイズの変更はできないっぽいので諦めます。 原因が分かっただけでも安心しました、ありがとうございました。
otn

2019/10/13 15:37

C00000FDのコードなら、VSでビルドされたPython.exeだと思うので、editbinを入手すれば変更できると思いますよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問