ฉันพยายามทำใหม่หลายครั้งแล้ว แม้ว่าถึงจุดหนึ่ง ฉันคิดว่าฟังก์ชัน longestSequence จะช่วยได้ เนื่องจากมันแสดงลำดับลูกเห็บที่ยาวที่สุด แม้ว่าฉันไม่สามารถหาวิธีค้นหาหรือเก็บคุณค่าที่ใช้ในการค้นหาได้ หากใครสามารถอธิบายวิธีการได้ฉันจะขอบคุณ
int longestSequence(int n)
{
int u = n;
if(u == 1)
{
return 1;
}
else
{
return max(hailstoneLength(u), longestSequence(u-1));
}
}
ส่วนที่ฉันมีปัญหาคือลำดับการเริ่มต้นที่ยาวที่สุดของฉัน:
int hailLongestSeq(int n)
{
int k;
int longest = 0;
for(int j = 1; j <= n; j++)
{
if(hailstoneLength(j) > longest)
{
longest = hailstoneLength(j);
k = j;
}
}
return k;
}
ฉันไม่แน่ใจว่าจะทำให้สิ่งนี้เป็นการเรียกซ้ำได้อย่างไร ฉันสังเกตเห็นว่ามีการเรียกซ้ำบางอย่างที่ฉันเห็นผู้คนใช้ for loops แต่ฉันมั่นใจว่าเราไม่ควรใช้ลูป อาจเป็นคำถามโง่ๆ แต่มีสูตรในการแปลลูปเป็นการเรียกซ้ำหรือไม่ หากมีใครรู้
ผลลัพธ์ที่คาดหวังจะเป็นดังนี้:
ลำดับลูกเห็บที่ยาวที่สุดที่เริ่มต้นด้วยตัวเลขไม่เกิน 10 จะมีความยาว 20 ลำดับลูกเห็บที่ยาวที่สุดที่เริ่มต้นด้วยตัวเลขไม่เกิน 10 จะเริ่มต้นด้วย 9
เนื่องจากลำดับของ 9 มีความยาว 20 หมายเลข และยาวที่สุดตั้งแต่ 1 ถึง 10