• ベストアンサー

再帰関数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
質問者

お礼

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