ثنائي عودي إلى وظيفة العشرية بدون الأسرى () أو الحلقات

StackOverflow https://stackoverflow.com/questions/1821334

  •  10-07-2019
  •  | 
  •  

سؤال

وأنا أفعل دورة C. ولست بحاجة للقيام ثنائي XOR عودي ولكن لدي بعض القيود. لا يمكنني استخدام حلقة أو أية وظائف math.h، ولا يمكنني استدعاء وظيفة أخرى من وظيفة XOR.

وهذا هو تعريف الدالة:

int binaryXor(int firstnumber[], int secondnumber[], int length);

وحيث firstnumber وsecondnumber هي المصفوفات مع طول نفس 1S و 0s وطول وطولها.

وظيفة يجب أن تعود القيمة العشرية XOR تلك المصفوفات اثنين. القيام XOR هو بسيط جدا، ولكن كيف يمكنني تحويله إلى عشري مع جميع القيود؟

هل كانت مفيدة؟

المحلول

وهذا هو السؤال العودية القياسية. الحيلة هي أن ندرك أن قيمة عدد صحيح من سلسلة من 1S و 0s تليها 1 أو 0، هو 2 * قيمة عدد صحيح السلسلة بالإضافة إلى قيمة الرقم.

وهكذا كنت تريد أن تفعل شيئا مثل

if( length <= 0) return 0;

return 2 * binaryXOR(firstnumber, secondnumber, length - 1) + (firstnumber[length - 1] ^ secondnumber[length - 1]);

نصائح أخرى

في أجل كتابة وظيفة متكررة، مع عدم وجود حلقات، تحتاج إلى الإجابة على السؤال التالي:

و"كيف يمكنني التعبير عن الجواب لمشكلتي من حيث مشكلة صغيرة؟"

في هذه الحالة، فإن المشكلة هي أن لديك أرقام length لننظر، ولكن كنت لا يسمح للحلقة. لذلك، كيف يمكن التعبير عن XOR من حجم length من حيث XOR أصغر، جنبا إلى جنب مع بعض مقدار العمل الذي لا يحتاج الى الحلقة؟

[تحرير: تشبث، بدا للتو في سؤالك مرة أخرى، وأنت تقول لديك بالفعل XOR فرز، لذلك اعتقد انك قد فعلت ذلك. في هذه الحالة تعليقي أعلاه هو الشيء الوحيد الذي عليك أن تعرف: الانتهاء. وint في C ليست قيمة عشرية، انها مجرد قيمة. أنت لا تحتاج إلى تحويل أي شيء إلى عشري من أجل تخزين أو إعادته في int.

إذا كنت مهتما على الرغم من أنني يمكن إضافة التعليمات البرمجية التي لم تحويل عدد صحيح إلى قيمة عشرية باستخدام وظيفة متكررة. طريقة بسيطة واحدة هي العمل على الطريق من "القاعدة" كم عدد الأرقام المطلوبة، من خلال مقارنة مع القوى أكبر وأكبر من 10، ومن ثم في طريق العودة "حتى" طباعة الأرقام من ابتداء من نهاية المباراة.]

ويمكن أن تستخدم استدعاء دالة متكررة بدلا من حلقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top