2016-09-19 15 views
-4

私たちは*(または別の乗算形式)を使用せずに、整数(n、m)に掛け合わなければならないPythonのプログラミングクラスの宿題です。私たちはこの問題を解決するために再帰を使うことになっているので、mをn回追加してみました。私は自分の問題は再帰自体を使用することだと思う。私は、インターネット上で再帰の使用法を検索しましたが、結果はありません。ここに私のコードです。誰かが私を正しい方向に向けることができますか?再帰を使用して*記号なしで乗算するにはどうすればよいですか?

def mult(n,m): 
     """ mult outputs the product of two integers n and m 
      input: any numbers 
     """ 
     if m > 0: 
      return n + n 
      return m - 1 
     else: 
      return 1 
+7

ヒント:通常、再帰はコードパスの少なくとも一つに_itself_関数呼び出しを必要とします。 – mgilson

+5

基本ケースと再帰ケースの観点から乗算を定義しようとします。再帰的な場合は 'n + mult(n、m - 1)'なので、 'n'は' n 'と ' m'から1を引いたものです。 –

+1

[Pythonでの再帰関数の構築](http://stackoverflow.com/questions/479343/how-can-i-build-a-recursive-function-in-python)またはそのリンクされた質問[Pythonでの再帰の基礎](0120-18753)。 – JGreenwell

答えて

1

私は代わりに、うまくいけば、私は:-)に沿ってあなたを助けるかもしれ再帰の例を提供することができ、ここで宿題にあなたに答えを与えたくありません。

# Here we define a normal function in python 
def count_down(val): 
    # Next we do some logic, in this case print the value 
    print(val) 

    # Now we check for some kind of "exit" condition. In our 
    # case we want the value to be greater than 1. If our value 
    # is less than one we do nothing, otherwise we call ourself 
    # with a new, different value. 
    if val > 1: 
     count_down(val-1) 

count_down(5) 

どのようにこれを現在作業しているものに適用できますか?たぶん、何かを印刷する代わりに、代わりに何かを返すことができるかもしれません...

0

あなたは正しいメカニックがありますが、あなたはあなたの検索で見つかった基礎を内部化していません。再帰関数は、通常、次の2つの場合に分けられます。

  1. ベースケース - 完了したらいつ知っていますか?その時点で何をしたいですか?

ここで、基本ケースは乗数が0のときであることが分かりました。この時点で何を返すのですか?あなたは加算プロセスとしてこれをやっていることを覚えておいてください。私はあなたが加算的な同一性要素ではなく、乗法ではないと信じています。

  1. 再帰ケース - 問題を簡略化するために些細なことをしてから、この簡略化されたバージョンで再発します。

ここでは、ラン合計を向上させ、乗数を1ずつ減らしたいと考えています。ただし、関数を再度呼び出すことはありません。あなたは累積合計を適切に強化していません。あなたは被乗数を2倍にしました。また、再帰について混乱しています。returnは、この関数を呼び出したものに戻ります。再帰については、

mult(n, m-1) 

のようになります。これは関数であり、値を返します。さて、あなたはこの値で何をする必要がありますか?たとえば、4 * 3を計算しようとしている場合、上記のステートメントは4 * 2の値を与えます。これで何をするのですか。これにより、4 * 3の正しい値をこのインスタンス?あなたは、あなたがそのに記入する必要が

result = mult(n, m-1) 
return [...] result 

のようなもの... [...]スポットをお勧めします。必要に応じて、これらを1行のコードにまとめることができます。私はそれをあなたのために簡単にしようとしています。

0

ありがとう、私はそれを考え出した! 私は1の代わりに0を返さなければなりませんでした。そうでなければ、答えは常に私たちが望んでいたものより1つ高いでしょう。 と私はあなたが私が逃した主なものである機能を呼び出す必要がある方法を理解します。ここ は私がやったことだ:

def mult(n,m): 
     """ mult outputs the product of two integers n and m 
      input: any numbers 
     """ 
     if m == 0: 
      return 0 
     else: 
      return n + mult(n, m - 1) 
関連する問題