我正在關注 youtube 上的動態編程教程,以了解有關遞回函式的更多資訊,但我被困在使用擴展運算子的地方。
JavaScript 中的代碼
const howSum = (targetSum, numbers) =>{
if(targetSum === 0) return [];
if(targetSum < 0) return null;
for(let num of numbers){
const remainder = targetSum - num;
const remainderResult = howSum(remainder, numbers);
if(remainderResult != null){
return [...remainderResult, num];
}
}
return null;
};
這是我試圖復制函式的 C# 中的代碼
class HowSumSlow {
static dynamic HowSum(int targetSum, int[] numbers)
{
if (targetSum == 0) return numbers;
if (targetSum < 0) return null;
foreach( var num in numbers){
var remainder = targetSum - num;
int[] remainderResult = HowSum(remainder, numbers);
if (remainderResult != null) {
//Code here//
}
}
return null;
}
static void Main(string[] arg) {
int[] numbers = new int[] { 2, 3 };
Console.WriteLine(HowSum(7, numbers));
}
}
編輯:我應該使用字典并使用密鑰嗎?我不明白如何解決這個問題。
static Dictionary<int, int[]> spread = new Dictionary<int, int[]>();
static dynamic HowSum(int targetSum, int[] numbers){
...
if(spread.ContainsKey(remainderResult)){
return spread[remainderResult];
}
}
編輯:
class HowSumSlow {
static int[] HowSum(int targetSum, int[] numbers)
{
int[] empty = new int[] { };
if (targetSum == 0) return empty;
if (targetSum < 0) return null;
foreach( var num in numbers){
var remainder = targetSum - num;
int[] remainderResult = HowSum(remainder, numbers);
if (remainderResult != null){
return remainderResult.Append(num).ToArray();
}
}
return null;
}
static void Main(string[] arg) {
int[] numbers = new int[] { 2, 3, 5 };
Console.WriteLine(String.Join(",", HowSum(8, numbers)));
}
}
uj5u.com熱心網友回復:
c# 中沒有展開運算子,您可以使用命名空間Append中的方法System.Linq。由于這會回傳,IEnumerable<T>您還需要在ToArray()之后呼叫。
JS中的這一行
return [...remainderResult, num];
可能是c#中的以下內容
return remainderResult.Append(num).ToArray();
請注意,您的方法始終回傳或為 null,因此int[]回傳型別不應為!int[]dynamic
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/436231.html
標籤:javascript C# 递归
上一篇:如何在C#中顯示空陣列?
