पैलिंड्रोम सरणी
एक सरणी पैलिंड्रोम होती है यदि यह आगे और पीछे से समान पढ़ी जाए।
उदाहरण: {1, 2, 3, 2, 1} ✓, {1, 0, 0, 1} ✓, {1, 2, 3, 4} ✗
रिकर्सिव दृष्टिकोण
- आधार मामला: यदि
start >= end→ पैलिंड्रोम (true) - जांच: यदि
arr[start] != arr[end]→ पैलिंड्रोम नहीं (false) - रिकर्सन:
start+1औरend-1के साथ कॉल करें
C प्रोग्राम
#include <stdio.h>
#include <stdbool.h>
bool is_palindrome(int arr[], int start, int end) {
// आधार मामला
if (start >= end)
return true;
// बेमेल जांचें
if (arr[start] != arr[end])
return false;
// आंतरिक उप-सरणी के लिए रिकर्सन
return is_palindrome(arr, start + 1, end - 1);
}
int main() {
int arr[] = {1, 2, 0, 2, 1};
int n = sizeof(arr) / sizeof(arr[0]);
printf("सरणी: ");
for (int i = 0; i < n; i++) printf("%d ", arr[i]);
printf("\n");
if (is_palindrome(arr, 0, n - 1))
printf("हाँ, सरणी पैलिंड्रोम है\n");
else
printf("नहीं, सरणी पैलिंड्रोम नहीं है\n");
return 0;
}
आउटपुट
सरणी: 1 2 0 2 1 हाँ, सरणी पैलिंड्रोम है
ट्रेस उदाहरण
is_palindrome([1,2,0,2,1], 0, 4)
arr[0]==arr[4]? 1==1 ✓
is_palindrome([1,2,0,2,1], 1, 3)
arr[1]==arr[3]? 2==2 ✓
is_palindrome([1,2,0,2,1], 2, 2)
start >= end → true
→ true
→ true
→ true
पुनरावृत्तीय संस्करण (तुलना)
bool is_palindrome_iterative(int arr[], int n) {
for (int i = 0, j = n - 1; i < j; i++, j--) {
if (arr[i] != arr[j])
return false;
}
return true;
}
जटिलता तुलना
| पहलू | रिकर्सिव | पुनरावृत्तीय |
|---|---|---|
| समय | O(n) | O(n) |
| स्थान | O(n) स्टैक | O(1) |
| पठनीयता | उच्च | मध्यम |
| स्टैक ओवरफ्लो जोखिम | हाँ (बड़े n के लिए) | नहीं |
स्ट्रिंग पैलिंड्रोम (बोनस)
bool is_string_palindrome(char str[], int start, int end) {
if (start >= end) return true;
if (str[start] != str[end]) return false;
return is_string_palindrome(str, start + 1, end - 1);
}