मैं पाइथन के साथ पिछले कुछ घंटों के लिए शुरुआती के रूप में प्रयोग कर रहा हूं। मैंने एक पुनरावर्ती समारोह लिखा, जो एक्स के रूप में रिकर्स (एक्स) देता है! पायथन और जावा में, दोनों की तुलना करने के लिए। कोड के दो टुकड़े समान हैं, लेकिन किसी कारण से, पायथन एक काम करता है, जबकि जावा कोई नहीं करता है। अजगर में, मैं ने लिखा है:कोड के इन दो समान टुकड़े अलग-अलग परिणाम क्यों उत्पन्न करते हैं?
x = int(raw_input("Enter: "))
def recurse(num):
if num != 0:
num = num * recurse(num-1)
else:
return 1
return num
print recurse(x)
कहाँ चर संख्या ही संख्या -1 द्वारा गुणा जब तक यह 0 तक पहुँच जाता है, और परिणाम आउटपुट। जावा में, कोड के समान है, केवल लंबे समय तक:
public class Default {
static Scanner input = new Scanner(System.in);
public static void main(String[] args){
System.out.print("Enter: ");
int x = input.nextInt();
System.out.print(recurse(x));
}
public static int recurse(int num){
if(num != 0){
num = num * recurse(num - 1);
} else {
return 1;
}
return num;
}
}
अगर मैं 25 में प्रवेश, पायथन कोड रिटर्न 1.5511x10E25 है, जो सही जवाब है, लेकिन जावा कोड रिटर्न +२०७६१८०४८०, जो सही जवाब नहीं है, और मुझे यकीन नहीं है कि क्यों।
दोनों कोड एक ही प्रक्रिया के बारे में जाना:
- जांच करें कि संख्या शून्य
- है संख्या शून्य
- num = संख्या संख्या का प्रत्यावर्तन से गुणा नहीं है - 1
- यदि संख्या शून्य है
- वापसी 1, रिकर्स कॉल के ढेर को समाप्त करना, और सी हर लौटे संख्या ausing गुणा शुरू करने के लिए
- वापसी संख्या
अजगर में कोई कोष्ठक हैं; मैंने सोचा कि किसी भी तरह से चीजों को बदल दिया है, इसलिए मैंने जावा कोड से ब्रैकेट हटा दिए, लेकिन यह नहीं बदला। बुलियन को बदलना (num! = 0) से (num> 0) ने कुछ भी नहीं बदला है। किसी और कथन को और अधिक संदर्भ प्रदान करते हुए, लेकिन मान अभी भी वही था।
पायथन:
1
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
6227020800
87178291200
1307674368000
20922789888000
355687428096000
6402373705728000
121645100408832000
2432902008176640000
51090942171709440000
1124000727777607680000
25852016738884976640000
620448401733239439360000
15511210043330985984000000
15511210043330985984000000
एक स्थिर वृद्धि
हर बिंदु पर संख्या के मूल्यों मुद्रण कैसे समारोह गलत हो जाता है की एक विचार देता है। जावा में:
1
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
1932053504
1278945280
2004310016
2004189184
-288522240
-898433024
109641728
-2102132736
-1195114496
-522715136
862453760
-775946240
2076180480
2076180480
कोई स्थिर वृद्धि नहीं है। वास्तव में, संख्या नकारात्मक संख्या लौट रही है, भले ही फ़ंक्शन नकारात्मक संख्याएं लौटा रहा हो, भले ही संख्या शून्य से नीचे न हो।
दोनों पायथन और जावा कोड एक ही प्रक्रिया के बारे में जा रहे हैं, फिर भी वे जंगली रूप से अलग-अलग मान लौट रहे हैं। ये क्यों हो रहा है?
इंटीजर ओवरफ़्लो ... – Mysticial
पाइथन int से लंबे समय तक स्वचालित रूप से प्रचार करता है जबकि जावा नहीं करता है। – jamylak
यह एक अच्छा सवाल है कि यह ऐसा कुछ है जहां सभी प्रश्न-उत्तरकर्ता तुरंत समस्या को समझते हैं, लेकिन यह ऐसा कुछ है जिसे आप वास्तव में खोज नहीं सकते हैं जबतक कि आप पहले से ही नहीं जानते कि समस्या क्या कहलाती है। –