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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

2171閲覧

コラッツの予想について

manman

総合スコア233

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2015/07/17 13:27

編集2015/07/17 16:22

コラッツの予想で、nが1になるまでの計算の回数を求めるメソッドを
なるべく短く定義してみてください。(言語は問いません。)

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

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

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

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

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

Stripe

2015/07/17 14:25

「nが1になるまでの計算の回数を求めるメソッド」となっていますが、そのコードだと計算回数が出ないと思います。
guest

回答2

0

ベストアンサー

3つの言語で書いてみました。

ruby

1def collatz n 2 n == 1 ? 0 : 1 + collatz(n.even? ? n / 2 : 3 * n + 1) 3end

coffeescript

1collatz = (n) -> 2 (while n > 1 3 n = if n % 2 then n * 3 + 1 else n / 2).length

coffeescript

1collatz = (n) -> 2 if n is 1 then 0 else 1 + collatz if n % 2 then 3 * n + 1 else n / 2

haskell

1collatz 1 = 0 2collatz n = 1 + collatz (if odd n then 3 * n + 1 else div n 2)

haskell

1collatz = length . takeWhile (> 1) . iterate (\n -> if odd n then 3 * n + 1 else div n 2)

投稿2015/07/18 02:58

JohnSmith

総合スコア198

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

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

0

JavaScriptです。
再帰だと回数計測が難しかったのでループでやってみました。

javascript

1c=function(n){ 2 for(i=1; n>1; i++)n=(n%2)? n*3+1 : n/2 3 return i 4}

投稿2015/07/17 15:40

編集2015/07/17 15:41
hirohiro

総合スコア2068

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

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

Stripe

2015/07/17 16:55

c(1);としたときの計算回数が1回と出ます。0回となるべきでは?
hirohiro

2015/07/17 17:08 編集

確かにおっしゃるとおりですね。 検証時に1までnを出力して数を数えたので勘違いしていたみたいです。(1の回まで加えた) iの初期値を1ではなく0に変更で修正できそうに思います。 c=function(n){ for(i=0; n>1; i++)n=(n%2)? n*3+1 : n/2 return i }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問