このコードは動作しますが、ここでは関数を再帰的に呼び出す際にreturnを使用しませんでした。それは私がPythonで同じコードを記述する場合、このコードはどれも(私が条件ならば値は内部のreturn文から返されるべきだと思う)ここでは再帰で戻り値を使用する
def gcd(a, b):
if b == 0:
return a
gcd(b, a % b)
はこのコードを作らないために返し、正しい出力に
int gcd(int a, int b)
{
if(b == 0)
return a;
gcd(b, a % b);
}
を与えるが、仕事、私は返信を追加する必要があります
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
なぜですか? CとPythonのコード実行の違いは何ですか?再帰的に呼び出すときに余分な戻り値を追加すると、C言語のコードも動作しますが、なぜそれはエラーをスローしませんか?
として行方不明のリターンパスを扱います。 –
プログラミングの第一のルール:これまで実行したたびに正しい結果が得られたからといって、プログラムが正しいとは限りません。あなたは最初のケースでは幸運なことがあります。最初のアキュムレータ(これはx86の場合は 'ax')に1つの' int'値が返され、全てのリターンコールが返される 'ax'の結果をすべての再帰が渡すと判断する' return a ' (あなたの 'gcd'再帰呼び出しがあなたがやる最後のものですから)変更されません。技術的には、明確に定義された動作であるためには、 'return gcd(b、a%b)'が必要です。 – lurker
[Pythonでの再帰の基礎](https://stackoverflow.com/q/30214531/2823755)、SO Q&A @EugeneSh。 – wwii