質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

2回答

1844閲覧

竹内関数の再帰回数の求め方

R908

総合スコア15

Python 3.x

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

0グッド

0クリップ

投稿2019/05/22 07:12

前提・実現したいこと

pythonの学習を始めて間もないものです。
竹内関数(https://ja.wikipedia.org/wiki/%E7%AB%B9%E5%86%85%E9%96%A2%E6%95%B0)
でtarai(12,6,0)を実行したときの再帰の回数12,604,860 回 を表示するプログラムを作りたいです。

発生している問題・エラーメッセージ

カウンターをどこに持っていけばいいかわかりません。

該当のソースコード

python3.7

1def tarai(x,y,z): 2 counter=0 3 if x<=y: 4 return y 5 else: 6 return tarai(tarai(x-1,y,z),tarai(y-1,x,z),tarai(z-1,x,y)) 7 counter++ 8 9print(tak(12,6,0)) 10print(counter)

試したこと

ネットで調べても処理時間を求めるコードしかなく、参考になりそうなものがありませんでした。

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

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

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

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

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

cateye

2019/05/22 08:07

tarai(tarai(x-1,y,z),tarai(y-1,x,z),tarai(z-1,x,y)) ↓ Wikipediaより tarai(tarai(x-1,y,z),tarai(y-1,z,x),tarai(z-1,x,y))
guest

回答2

0

(まるごと正解を書かないように説明にとどめますが)
まず「グローバル変数」にcounterを持ちましょう。

そして現在関数が呼ばれた直後に counter = 0 にしているので、それではカウントが増えませんね。また、counter++ が return の後に書かれているため、それは実行されません。counter = 0 の代わりにカウントアップしましょう。

ちなみに counter++ という表現はPythonにはないので counter += 1 にしましょう。

最後に、

return tarai(tarai(x-1,y,z),tarai(y-1,x,z),tarai(z-1,x,y))

return tarai(tarai(x-1,y,z),tarai(y-1,z,x),tarai(z-1,x,y))

の誤りです(Tak関数の定義をよく見ること...竹内関数ではなくマッカーシー版のTak関数であれば)

投稿2019/05/22 07:24

編集2019/05/22 07:26
tetsunosuke

総合スコア1292

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

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

R908

2019/05/22 07:44

回答ありがとうございます。 知識不足でした...
guest

0

ベストアンサー

以下のようにカウンタ変数を入れます。なお

  • Pythonではインクリメント演算子++は使えません。
  • 提示コードの再帰部分の式tarai(~)に誤記があるようです。竹内関数で確認ください。

Python

1def tarai(x,y,z): 2 global counter 3 counter += 1 4 if x<=y: 5 return y 6 else: 7 return tarai() 8 9counter=0 10print(tarai(12,6,0)) 11print(counter)

投稿2019/05/22 07:23

編集2019/05/22 07:32
can110

総合スコア38262

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

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

R908

2019/05/22 07:45

回答ありがとうございます。 無事解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問