2017-10-21 2 views
-2

私はユーザが入力した数を受け取り、プログラムが整数のすべての桁の積を計算できるようにする再帰プログラムを作成しようとしています。どのようにしてプログラムを実行したいのですか?すべての桁の積を計算するためにループをどのように動かすべきかを考えることができません。 numの最後の桁を取得するnum%10と整数の最後から一度に1桁を削除するnum/10を使用することで、言語cでこれを実行できることが分かりました。私はC#でこれをどのように実装することができ、if/else構造体をどのようにするべきかを考え出すことができません。整数のすべての桁の積C#

以下はif/elseステートメントのコードの作成以外のプログラム用に作成したコードです。誰かがこれを達成する方法の正しい方向で私を指すことができるなら、それは認められるだろう。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using static System.Console; 

namespace _3 
{ 
class Tester 
{ 
    public static void Main(string[] args) 
    { 
     int length; 
     Write("Enter a number: "); 
     string num = Console.ReadLine(); 
     length = num.Length; 
     int productofnum = Int32.Parse(num); 
     productofnum = CalcProduct(productofnum); 
     WriteLine("The product of all digits of the number {0} is {1}.",num, productofnum); 
    } 
    public static int CalcProduct(int num) 
    { 
     int length = num.ToString().Length; 
     if (length == 0) 
     { 

     } 
     else 
     { 
     } 
     return num; 
    } 
} 
} 

答えて

1

まず、再帰関数を使用するときは、内部にループを配置しないでください。

あなたは、ほぼ正確にメソッドの構造を構築しましたが、それは少しの変更が必要になります。

public static int CalcProduct(int num) 
{ 
    int length = num.ToString().Length; 
    if (length == 1) 
    { 
     return num; 
    } 
    return (num % 10) * CalcProduct(num/10); 
} 

説明:

通常はあなたが使用している機能を呼び出す必要が再帰関数を使用してreturn - 再帰的になるので、Recursive methods using C#で詳しく読んでください。

+0

グレートは、私はそれをしたいどのように動作します! if(ベースケース)とelse(再帰ケース)は、ベースケースを真にするためにループする必要があると言われています。これは私が最も簡単な再帰形式で見つけた例です。 https://paste.ofcode.org/k6LNEqJNBGVm6k9uZxxEVU Microsoftは、上記のことが真実であると述べていると思います。 https://msdn.microsoft.com/en-us/library/z3dk2cc3(v=vs.100).aspx#再帰を使用して あなたの答えは記事の記述方法と同じようにすることができますか? –

+0

まず、これは書くのが難しい部分だと思っています。他のすべてのことは必要ですが、あなたの主な問題ではありませんでした。第2に、SOはサイトではないので、人々はあなたの宿題を解決します(なぜ2つの否定的な票を得たのか)。今、あなたは自分でできることができて、続けるべきです。 – Yonlif

1

あなたのプログラムが負の数でも動作するようにするには、divとmodを使う前にMath.Abs​​(num)を使うことを忘れないでください。このような何か:

public static int CalcProduct(int num) 
{ 
    int _num=Math.Abs(num); 
    int length = _num.ToString().Length; 
    if (length == 1) 
    { 
     return _num; 
    } 
    return (_num % 10) * CalcProduct(_num/10); 
} 

あなたがそれを好む必要があります。また、ここでは、末尾再帰メソッドです:

private static int CalcProductTailRecHelper(int num, int res) 
{ 
    int length = num.ToString().Length; 
    if (length == 1) 
    { 
     return res; 
    } 
    return CalcProductTailRecHelper(num/10, res*(num % 10)); 
} 

private static int CalcProductTailRec(int num){ 
    CalcProductTailRecHelper(Math.Abs(num), 1) 
} 
+0

ありがとうございます、あなたは正しいです、私は答えを書いたときにそれを忘れました。 – Yonlif

関連する問題