2017-10-21 109 views
1

這是一個非常常見的JavaScript技術,但我想確保我可以在C#中完成這項工作。從C#本身調用一個函數#

我在功能DoSomething()和執行呼叫期間,我需要調用具有不同值的同一個函數。請看下圖:

public bool DoSomething(int id) 
{ 
    if(id < 100) 
    { 
     // Some logic here 
     var someValue = id + 50; 
     var outcome = DoSomething(someValue); 

     // Some more logic here 
    } 
    else 
    { 
     // Some other logic here 
    } 
} 

我不明白爲什麼我不能做以上,但要看到,如果這是在C#中的壞習慣。

+0

遞歸如何是一種不好的做法?,但編號說使用'var'是,除非你不知道類型是什麼;) – WilomGfx

+3

這是一個簡單的遞歸,它是完全正確的。 – Bidou

+2

@通常遞歸是一種有用的技巧,可以使代碼簡潔易懂。但是,它性能較差,並且會在非尾部調用優化語言中產生堆棧溢出異常。在遞歸函數和迭代函數之間進行選擇時仔細審查您的用例。 –

回答

2

這個概念被認爲是recursion,它並不侷限於JavaScript。它實際上是一個相當廣泛的知識技術,實際上是替換某些語言(如方案)中的循環。

從C#中自身調用函數也是有效的。由於您對堆棧有限制,因此請確保您有終止條件。由於每個函數調用都會將另一個項目推送到調用堆棧,因此您可能會得到所謂的堆棧溢出

1

不,這不壞。幾乎所有的編程語言都是很常見的東西。但是,你必須小心不要無限循環。

2

此技巧被稱爲Recursion

遞歸在計算機科學,其中溶液的 問題取決於到同樣的問題 (相對於迭代)的更小的情況下的解決方案的方法。

大多數計算機編程語言通過允許 函數在程序文本中調用自身來支持遞歸。

這不是不好的做法,但無論是正確的或不適合你取決於你的用例。