我有一个函数,它接受一个整数值,并返回一个[i / 2,i / 3,i / 4]的列表。我!= 0.我还有一个递归,它应该计算函数(i)由于达到0而无法达到0.然后,我计算列表中有多少个零并输出它。
C#:
library(randomForest)
rf <- randomForest(train, train_label,importance=TRUE,proximity=TRUE)
prediction<-predict(rf, test, type="prob")
7应该返回15 0但它返回6个零。为什么呢?
答案 0 :(得分:1)
你怎么知道7应该返回15 0?
第一次迭代,您将有3个条目
x1 , x2 和 x3
之后,对于每个条目(3个条目),您最多可以有3个条目
x1 生成 x11 , x12 和 x13
x2 生成 x21 , x22 和 x23
x3 生成 x31 , x32 和 x33
更多9个条目。总计:9 + 3 = 12
如果你最多有12个数字,怎么能有15个?
答案 1 :(得分:1)
让我们逐步完成您的代码
static void Main(string[] args)
{
int input = 7;
int zeroes = 0;
List<int> myList = ATM(input);
mylist =&gt;
[3,2,1]
foreach(var number in myList.ToArray())
{
if (number != 0)
{
myList.AddRange(ATM(number));
}
else
{
continue;
}
- 3 mylist =&gt;
[3,2,1,1,1,0]
- 在2 mylist =&gt;之后
[3,2,1,1,1,0,1,0,0]
- 1 mylist =&gt;之后
[3,2,1,1,1,0,1,0,0,0,0,0]
}
手工计数零...你看到6个零
foreach (var zero in myList)
{
if (zero == 0)
{
zeroes += 1;
}
}
Console.WriteLine(zeroes);
Console.ReadKey();
Console.ReadKey();
}
static List<int> ATM(int value)
{
List<int> exchangeCoins = new List<int>();
if (value != 0)
{ // 7 3 2 1
exchangeCoins.Add(value / 2); // 3 1 1 0
exchangeCoins.Add(value / 3); // 2 1 0 0
exchangeCoins.Add(value / 4); // 1 0 0 0
}
else
{
throw new Exception("Value can't be zero!");
}
return exchangeCoins;
}
}
这就是为什么你的代码返回6
如果你的目标是获得15个零,那么你必须设计ATM是递归的:
static void Main( string[ ] args )
{
int input = int.Parse( Console.ReadLine() );
int zeroes = 0;
List<int> myList = ATM( input );
foreach ( var zero in myList )
{
if ( zero == 0 )
{
zeroes += 1;
}
}
Console.WriteLine( zeroes );
Console.ReadKey();
Console.ReadKey();
}
ATM中的递归呼叫
static List<int> ATM( int value )
{
List<int> exchangeCoins = new List<int>();
if ( value != 0 )
{
exchangeCoins.Add( value / 2 );
exchangeCoins.Add( value / 3 );
exchangeCoins.Add( value / 4 );
// recursive call on the three items
foreach ( var item in exchangeCoins.ToArray() )
{
exchangeCoins.AddRange( ATM( item ) );
}
}
return exchangeCoins;
}