2

整数nをパラメーターとして受け取り、n個のスターマークとそれに続くn個の感嘆符をすべて1行に出力する再帰関数printPattern()を作成する必要があります。関数にはループがあってはならず、文字列の乗算を使用してはなりません。文字の印刷は再帰的にのみ行う必要があります。以下は、関数の動作の例です。

>>>printPattern(3)
***!!!
>>>printPattern(10)
**********!!!!!!!!!!

これは私が今持っているものです

def printPattern(n):
if n < 1:
    pass
else:
    return '*'*printPattern(n)+'!'*printPattern(n)

私は完全にオフになっていることを知っています。これは再帰がなければ簡単ですが、私の割り当てには必要です。

4

3 に答える 3

3

Q:何printPattern(0)ですか?
A:何もありません。

Q:何のprintPattern(n)ためにn>=1
A:、*次にprintPattern(n-1)、、次に!

今、あなたはそれを行うことができるはずです。再帰的に考えることを忘れないでください。

于 2012-10-23T03:37:23.347 に答える
2

再帰は2つのことに基づいています。

  • ベースケース
  • 基本ケースではないものを前提として、基本ケースに近いものに基づいて回答を得る方法。

あなたの場合、最も単純な基本ケースはおそらく0-もの(空の文字列)を出力します。です。printPattern(0)_''

では、どのようにして入力から0に近づくのでしょうか。まあ、おそらくそれを1つ減らすことによって。

それで、あなたが現在にいn=5て、基本ケースに近い何かに基づいて答えを出したいとしましょう-あなたはのためn=5のものから答えを得たいと思うでしょうn=4

の出力はn=5です*****!!!!!

の出力はn=4です****!!!!

n=4toの出力からどのように取得しますn=5か?さて、あなた*は前にと!最後にを追加します。

つまり、それprintPattern(5)は実際にはただのことだと言えます'*' + printPattern(4) + '!'

これがどこに向かっているのか分かりますか?

于 2012-10-23T03:36:22.350 に答える
2

これを試して:

def printPattern(n):
    if n <= 0:
        return ''
    return '*' + printPattern(n-1) + '!'

print printPattern(5)
> *****!!!!!
于 2012-10-23T03:38:56.187 に答える