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

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

ただいまの
回答率

90.33%

  • Ruby

    8229questions

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

**を使わずに再帰か繰り返しを使ってのプログラム

受付中

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 316

sabadesu

score 1

power(n,m)として
べき乗演算子**を使わずに
nのm乗を計算するとしたら
どうしたらいいでしょうか。
nは1以上の整数mは0以上の整数とします。
繰り返しのfor または whileを使ったパターンと
再帰を使ったパターンの両方を知りたいです。初学者ですみません
再帰の概念がわからず
def power(n,m)
if n==1   #nが1ならmが幾つでも
1         #答えは1
else       #そうでなければ,,,
この先の概念がよく理解できなく
m<=2
n*power(n*m-1)
end
end
かと思ったのですが、動かず
ならば
for i in n..m
n*power(n+1)
なのかとか。
基本がわかっておらず本当にすみません

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • キャンセル

  • 退会済みユーザー

    2018/04/27 21:31

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 4

+3

まず、「ab乗」は、「ab回かけ合わせたもの」です。

そして、Rubyで「何回繰り返す」というような場合、ふつうforwhileも使いません(よほど特殊な条件を除いて、Rubyのforはほぼ出番がありません)。代わりに、Integer#timesを使います(るりま)。


(質問の編集を踏まえて)

よく言われる言葉に、「プログラムは書いたようにしか動かない」というものがあります。再帰にしてもループにしても、まずはやるべきことを日本語で表現して、それをプログラム言語に訳していく、という方針でやっていきましょう。「こんな感じで動くだろう」では、計画的に作れる段階とは程遠いです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

# 2.5.0↑のみ
def power_1(n, m)
  n.pow m
end

def power_2(n, m)
  m.times.reduce(1){|r,_| r * n }
end

def power_3(n, m)
  m.zero? ? 1 : n * power_3(n, m-1)
end

def power_4(n, m)
  ([n] * m).reduce(:*) || 1
end

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

Rubyなど不要。そう、シェル芸ならね!

$ power(){ [[ $2 -eq 0 ]]&&echo 1||echo $((`power $1 $(($2-1))`*$1));}
$ power 2 10
1024
$ power 3 5
243

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

Rubyは詳しくないのでアルゴリズムだけ

  1. 一時変数xを1で初期化、一時変数yを0で初期化
  2. y < mである限り以下の処理を続ける。
  3.  xにnをかけて更新する。
  4.  yに1を加えて更新する。

ちなみに、これはmに比例する反復回数(処理時間)が必要ですが、mの対数に比例する改善方法もあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • Ruby

    8229questions

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