激凹みから立ち直る方法

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

A 回答 (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;
}

# 課題じゃなきゃループを使うと思う。
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2003/12/11 08:43

// 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;
}
    • good
    • 0
この回答へのお礼

参考になりました。

お礼日時:2003/12/11 08:44

> 完全平方根



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)、」の表示を行っているように見えます。
再帰処理の例題で良くある階乗の例に当てはめると、考え方は同じでよいと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/12/11 08:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!