• ベストアンサー

再帰関数squares()で完全平方根を帰す

整数のint nを受け取り、 最初からn個の完全平方根を大きい順で返す再帰関数を教えてください。 完全平方根 1(1*1)、4(2*2)、9(3*3)などです。

質問者が選んだベストアンサー

  • ベストアンサー
noname#5537
noname#5537
回答No.3

「完全平方数」の間違いではないかと。 #include <stdio.h> void squares(int n) {  if (n < 1) return;  printf("%d\n", n*n);  squares(n-1); } int main() {  squares(10);  return 0; } # 課題じゃなきゃループを使うと思う。

october31
質問者

お礼

ありがとうございます!

その他の回答 (2)

回答No.2

// C++で実装しました。 template<typename OutputIterator> OutputIterator squares(int n, OutputIterator result) { if ( n > 0 ) { result = squares(n-1, result); *result++ = n*n; } return result; } // お試し #include <iostream> int main() { int results[5]; int* last = squares(4,results); for ( int* p = results; p != last; ++p ) { std::cout << *p << std::endl; } return 0; }

october31
質問者

お礼

参考になりました。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

> 完全平方根 n=1→1(1*1)、 n=2→1(1*1)、4(2*2)、 n=3→1(1*1)、4(2*2)、9(3*3)、 n=4→1(1*1)、4(2*2)、9(3*3)、16(4*4)、 … という事でしょうか? n=4の時の例に注目すると、n=3までの表示処理を行った後で、「16(4*4)、」の表示を行っているように見えます。 再帰処理の例題で良くある階乗の例に当てはめると、考え方は同じでよいと思います。

october31
質問者

お礼

考え方が理解できました。

関連するQ&A

  • 平方根応用問題

    √756+√nが整数の平方根となるようなnの最小値を求めよ。ただしnは整数とする。という問題があります。 その問題の解答を見てみると、n=0とすると、√0=0だから、√756+√ん=√756となり、√756は整数756の平方根だから、条件に適する。よって、求めよって求めるnの最小値は0である。なお、nを正の整数と考えた時は、√756+√n=6√21+√nが計算されて1つの根号で表わされるようにすればよいから、nの最小値は21となる。このとき6√21+√21=7√21=√1029より整数1029の正の平方根となります。 が解答なのですが、私には、なぜ答えが21ではいけないのかわかりません。。 それにn=0としてしまうと、√756は整数ではなくなると思うのですが。

  • 平方数でない整数の平方根は無理数であることの証明

    すみません。高齢者なので使用する文字はすべて正の整数とします。 整数の平方根で整数になるのは1,4,9,16のような平方数だけです。例えば5の平方根を考えた場合、 4の平方根は2、 9の平方根は3ですから、5の平方根は2と3の間の数となり絶対に整数にはなりません。以上は単なる確認です。 そこで平方数ではない整数をaとします。これの平方根を√aと表記します。確認通り√aは整数にはなりません。この非平方数の平方根が分数で表現できるかどうかが問題です。 √a=n/mと分数で表現できるとします。ここでnとmは互いに素であるとし、当然m≠1です。 両辺を2乗すると  a=n2/m2 となります。ここでaは整数です。n2とm2にも共通の約数はないので、n2/m2は整数にはなりません。すると左辺は整数、右辺は小数(小数点以下が0ではない純粋の小数)になるのでこれは矛盾です。従って平方数ではない整数の平方根は全て無理数である。 質問は、こんなに簡単な証明でいいのだろうか?基本的なところで考え方に穴があるのではないだろうか?ということです。ご教示願います。

  • 平方根が・・・

    またまたGWの宿題です( ̄Д ̄;; 平方根が・・・です 下の問題の解き方と回答を教えてくださーい!! (1) √5の少数部分をaとするとき、a二乗+4a+3の値を求めよ。 (2) √45(11-3n)が整数になるような自然数nを求めよ。 *(2)の問題で「45(11-3n)」にすべて√がかかっています。 よろしくお願いします(。・ω・。)

  • 関数の再帰処理

    1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657... という数列(フィボナ数列)を再帰処理でだしたいのですが・・・・・ include <stdio.h> int function( int ); int main( void ){ int n; do { printf( "0 以上の整数値を入力して下さい→ " ); scanf( "%d", &n ); }while ( n < 0 ); printf( "計算結果: %d\n", function( n ) ); getchar(); getchar(); return 0; } int function( int n ){ //フィボナの処理(function)の再帰呼び出しによる } function内に再帰処理を用いてprintf( "計算結果: %d\n", function( n ) );で画面出力したいのですが・・・・・・。

  • C言語 再帰呼びだし

    C言語 再帰呼びだし 問題が解けません。もしよろしければご指導お願いします。 フィボナッチ数を求めるプログラミングを作成せよ。 非負の整数nに対するフィボナッチ数Fnは以下のように再帰的に定義される。 Fn=0 (n=0の時) Fn=1 (n=1の時) Fn=F(n-1)+F(n-2) (n>1の時) ・関数int fibo(int n)を作成し、関数mainで、複数のnに対して関数fiboを呼びだし、その結果を表示せよ。 ・関数fiboは、再帰的にfiboを呼びだすようにせよ。 よろしくお願いします。

  • 平方根について

    54321の平方根は、整数部分が何ケタの数ですか。という問題の答えと考え方を教えて下さい。 宜しくお願い致します。

  • modを使用した平方根の求め方

    解き方が解からない問題があります。 どれだけ考えても解き方がわからないので、どなたかわかる方教えてください。 【解き方が解からない問題】 大きな素数の積n=pqが与えられた時、nを素因数分解するのは非常に難しい。 整数mと整数y(<m)が与えられた時y=x2(xの二乗) mod mなる整数解xが存在すれば、yは mod mで平方剰余であるという。 xを mod mでのyの平方根という。 mが素数7の時、 12(1の二乗の事です。二乗の書き方がわからなくて・・・)≡1 (mod 7) 、 22(2の二乗) ≡ 4 (mod 7) 32(3の二乗)≡2 (mod 7) 、 42(4の二乗) ≡ 2 (mod 7) 52(5の二乗)≡4 (mod 7) 、 62(6の二乗) ≡ 1 (mod 7) となるので、1、2、4が平方剰余で、各平方剰余には2個の平方根がある。 mが二つの素数の積の場合、4個の平方根がある。 ここまでが参考書に載ってる説明です。 ここから私がわからない問題です。 102(10の二乗) mod 77=23 n = 77 の素因数7と11から素因数の知識を利用してZのmod nでの平方根Sを計算する。 S2(Sの二乗) ≡ 23 mod 7 S2(Sの二乗) ≡ 23 mod 11 上の2つを解いて、mod 77での4つの平方根10、32、45、67を得る。 この2つの式から、何をどうやって計算して、4つの平方根10、32、45、67が導き出せたのかわかりません。 二乗の表記の仕方がわからず、とても見難くなってしまいました。すみません。 乱文になってしまいましたが、どなたかわかる方教えてください。 よろしくお願いします。

  • 平方根の計算で・・・

    単純な質問ですみません。 平方根の計算で、答えが 2+3√5のような、整数と√の組み合わせ?の場合は 3√5+2のように、 整数より先に√を書いてもいいのでしょうか? これだと解答は×になりますか??

  • 再帰関数について

    非負の整数nに対して次のように定義された 関数F(n),G(n)がある。F(5)の値はいくらか。 関数 F(n):if n=<1 then return1 else return n×G(n-1) G(n):if n=0 then return0 else return n+F(n-1) (1)50 (2)65 (3)100 (4)120 正解 (2)65 以下解説 F(5):5×G(5-1)=5×(G(4))    =5×(4+F(4-1))=5×(4+(F(3)))    =5×(4+(3×G(3-1)))=5×(4+(+3×G(2))))    =5×(4+(3×(2+F(2-1))))=5×(4+(+3×(2+F(1)))))    =5×(4+(3×(2+(1))))    =65 再帰関数についての知識が皆無なので 教えて頂きたいのですが、なぜ=後の5×は残るのでしょうか。 そもそも再帰関数とは、どんなことを言っているのでしょうか。 具体例を挙げて頂くか、分かり易いURLを教えて頂けると幸いです。 お手数ですが、上記について1つ1つ丁寧に解説して頂きたいです。 大変ご迷惑な質問かと思いますが、分かる方おられましたら、 お手数ですが、ご教授お願いします。 以上、よろしくお願い致します。

  • 三角関数と平方根の積分

    この積分式を解いて下さい。お願いします。 テストの問題ではありませんが、 仕事上読んでいた文献に記載されていた数式です。 三角関数の積分なのですが、平方根の中にも三角関数が含まれており、 解くプロセスが良く分かりません。 どうかよろしくお願いします。

専門家に質問してみよう