Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में रिकर्सन से संख्या की घात की गणना

C# में रिकर्सन से घात की गणना

रिकर्सन में एक फंक्शन स्वयं को कॉल करता है जब तक बेस केस नहीं पहुंच जाता। घात की गणना: base^exp = base * base^(exp-1), बेस केस exp == 0 पर 1।

रिकर्सिव एल्गोरिदम

long Power(int n, int p) {
    if (p != 0)
        return n * Power(n, p - 1); // रिकर्सिव केस
    return 1;                        // बेस केस
}

पूर्ण उदाहरण

using System;

public class Demo {
    public static void Main() {
        int n = 5;
        int p = 2;
        long result = Power(n, p);
        Console.WriteLine($"{n}^{p} = {result}"); // 25
    }
    
    static long Power(int n, int p) {
        if (p != 0) {
            return n * Power(n, p - 1);
        }
        return 1;
    }
}

आउटपुट

25

एक्सीक्यूशन ट्रेस (5^2)

Power(5, 2)
  → 5 * Power(5, 1)
      → 5 * Power(5, 0)
          → 1 (बेस केस)
      → 5 * 1 = 5
  → 5 * 5 = 25

ऑप्टिमाइज़ेशन: टेल रिकर्सन (Tail Recursion)

C# कंपाइलर टेल कॉल ऑप्टिमाइज़ेशन की गारंटी नहीं देता, लेकिन एक्यूमुलेटर पैटर्न स्टैक ओवरफ्लो रोक सकता है:

static long PowerTail(int n, int p, long acc = 1) {
    if (p == 0) return acc;
    return PowerTail(n, p - 1, acc * n);
}

इटरेटिव विकल्प (अनुशंसित)

static long PowerIterative(int n, int p) {
    long result = 1;
    for (int i = 0; i < p; i++) result *= n;
    return result;
}

बड़े एक्सपोनेंट्स के लिए: एक्सपोनेंशिएशन बाय स्क्वेरिंग (O(log n))

static long PowerFast(long n, long p) {
    long result = 1;
    while (p > 0) {
        if ((p & 1) == 1) result *= n; // अगर p ऑड है
        n *= n;
        p >>= 1; // p /= 2
    }
    return result;
}

तुलना

विधिसमय जटिलतास्पेस जटिलतास्टैक ओवरफ्लो रिस्क
सिंपल रिकर्सनO(p)O(p)हां (बड़े p के लिए)
टेल रिकर्सनO(p)O(1)*कम (अगर TCO)
इटरेटिवO(p)O(1)नहीं
फास्ट एक्सपोनेंशिएशनO(log p)O(1)नहीं

* C# में TCO गारंटीड नहीं।

  1. OpenCV में C++ का उपयोग करके इमेज के चैनलों की संख्या कैसे गिनें? OpenCV में C++ का उपयोग करके इमेज के चैनलों की संख्या कैसे गिनें?

    इस विषय में, हम समझेंगे कि इमेज के चैनलों की संख्या कैसे पता करें। प्रोग्राम चलाने के बाद, चैनलों की संख्या कंसोल विंडो में दिखाई जाएगी। चैनलों की संख्या प्राप्त करने के लिए, हमने OpenCV की channels() नामक एक क्लास का उपयोग किया है। जब हम इमेज मैट्रिक्स को channels() क्लास के ऑब्जेक्ट के रूप में पास

  1. - पायथन में रिकर्सन का उपयोग करके प्राकृतिक संख्याओं का योग कैसे खोजें?

    यदि कोई फ़ंक्शन स्वयं को कॉल करता है, तो उसे रिकर्सिव फ़ंक्शन कहा जाता है। इसे अनंत लूप में पड़ने से रोकने के लिए, रिकर्सिव कॉल को कंडीशनल स्टेटमेंट में रखा जाता है। निम्न प्रोग्राम यूज़र से इनपुट के रूप में संख्या स्वीकार करता है और इसे rsum() फ़ंक्शन को आर्गुमेंट के रूप में भेजता है। यह प्रत्येक

  1. - Python में रिकर्सन का उपयोग करके संख्या का फैक्टोरियल कैसे खोजें?

    Python में रिकर्सन का उपयोग करके फैक्टोरियल किसी संख्या का फैक्टोरियल 1 से उस संख्या तक की सभी संख्याओं का गुणनफल होता है। एक फ़ंक्शन को रिकर्सिव फ़ंक्शन कहा जाता है यदि यह स्वयं को कॉल करता है। निम्नलिखित प्रोग्राम में factorial() फ़ंक्शन एक आर्गुमेंट स्वीकार करता है और मान को 1 तक कम करके स्वयं