- ベストアンサー
再帰関数squares()で完全平方根を帰す
整数のint nを受け取り、 最初からn個の完全平方根を大きい順で返す再帰関数を教えてください。 完全平方根 1(1*1)、4(2*2)、9(3*3)などです。
- みんなの回答 (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; } # 課題じゃなきゃループを使うと思う。
その他の回答 (2)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
// 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; }
お礼
参考になりました。
- neKo_deux
- ベストアンサー率44% (5541/12319)
> 完全平方根 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)、」の表示を行っているように見えます。 再帰処理の例題で良くある階乗の例に当てはめると、考え方は同じでよいと思います。
お礼
考え方が理解できました。
お礼
ありがとうございます!