当前位置: 首页 > 编程语言 > C#

使用C#lambda对n个数进行阶乘...?使用c#lambda分享

时间:2023-04-10 19:51:54 C#

n数的阶乘...?我刚开始玩lambda和Linq表达式来自学。我为此采取了简单的阶乘问题。在一个复杂的小场景中,找到给定数量的n个数字的阶乘(不能使用递归循环)。在我试过的代码下面。但这不起作用。publicvoidFindFactorial(intrange){varres=Enumerable.Range(1,range).Select(x=>Enumerable.Range(0,x).Where(y=>(y>1)).Select(y=>y*(y-1)));foreach(varouttinres)Console.WriteLine(outt.ToString());这是我使用的程序,我知道我在某个地方搞砸了。谁能告诉我哪里出了问题以及任何其他可能的解决方案。编辑:我打算让这个线程保持打开状态一段时间..因为这是我迈向lambda的最初步骤..我发现所有答案都非常有用和信息丰富..学习看到不同的东西会很有趣也很好解决这个问题的方法。目前没有递归——这就是问题所在。您只需采用一系列数字并将每个数字转换为“自身*自身-1”。编写阶乘函数的一种简单而低效的方法是:Funcfactorial=null;//这样我们就可以引用它factorial=x=>x通常你进入记忆是为了避免对同一件事进行两次计数。您可能想阅读WesDyer关于此类内容的博客文章。虽然这里没有递归,但它非常简单:publicstaticintFactorial(thisintcount){returncount==0?1:Enumerable.Range(1,count).Aggregate((i,j)=>i*j);}3.Factorial()==6继续Jon的回答,这里是你如何记住阶乘函数,这样你就不会在每一步都重新计算所有内容:publicFuncMemoize(Funcfunc){Dictionary_resultsCache=newDictionary();return(arg)=>{TResult结果;if(!_resultsCache.TryGetValue(arg,outresult)){result=func(arg);_resultsCache.Add(参数,结果);}返回结果;};}。..函数阶乘=null;//这样我们就可以引用它factorial=x=>xfactorialMemoized(x));foreach(varouttinres)Console.WriteLine(outt.ToString());编辑:实际上上面的代码是不正确的,因为factorial调用factorial,而不是factorialMemoized。这是一个更好的版本:Funcfactorial=null;//这样我们就可以引用它FuncfactorialMemoized=null;factorial=x=>xfactorialMemoized(x));foreach(varouttinres)Console.WriteLine(outt.ToString());使用该代码,阶乘被调用了10次,而之前的版本被调用了55次。我试图想出类似F#扫描功能的东西,但失败了,因为我的LINQ不是很强大。这是我的怪物://这类似于以下F#代码://letresult=[1..10]|>List.scan(funaccn->acc*n)1varresult=Enumerable.Range(1,10).Aggregate(newList(new[]{1}),(acc,i)=>{acc.Add(i*acc.Last());returnacc;});foreach(varnuminresult)Console.WriteLine("{0}",num);如果有人知道我错过的LINQ中是否有等效于F#的扫描功能,我将非常感兴趣。以上就是C#学习教程:n个数的阶乘使用c#lambda...?如果分享的所有内容对您有用,需要了解更多C#学习教程,希望您多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: