九連環的解決基本方法:想要改變某一個環的狀態,須保證兩點,第一,其前面一個環須是掛在橫桿上,第二,更前面的環都沒掛在橫桿上,然后采用遞推與遞歸的思想一步一步改變.
首先:了解環的狀態.

從右往左數,第一個環定義為橫桿之下(取下),第二個環定義為橫桿之上(掛起),第三環為非正常狀態(盡量不要弄成這樣,如果已經這樣,把右邊的全部取下,再把這個取下呈橫桿之下狀態),第4/5個均為橫桿之上狀態
其次:取下環的方法(以取下第5個環為例--當然,要取下第5個環,須得是第4個環在橫桿之上,第1-3個環在橫桿之下),步驟依次如下圖1-5

圖1:第1-3個環在橫桿之下,第4,5個環在橫桿之上

圖2:取出第4個環,露出第5個環

圖3:取出第5個環,整個環都在橫桿上方,不再是被橫桿穿上的狀態

圖4:把第5個環從橫桿中間放下,同時穿上第4個環,最后第5,1-3個環均呈橫桿之下狀態,第4個環呈橫桿之上狀態
最后:附上C++程序代碼
/*
九連環的解鎖原理:欲改變第N個環的狀態,必須保證其前一個環掛在橫桿上,更前一所有環均未掛在橫桿上
解決途徑:遞歸.
*/
#include<iostream>
using namespace std;
int lh[10],xh;
void cglh(int,int);
int main()
{
int cur,op,fp;
cout<<"請輸入要處理環的序號:";
cin>>cur;
cout<<"\n請選擇:1-掛上 2-取下 ";
cin>>op;
op%=2;
fp=(op+1)%2;
for(int i=cur;i>=1;i--)
{
cout<<"\n請輸入第"<<i<<"個環的狀態:(1-上面 0-下面)" ;
cin>>lh[i];
}
for(int i=cur;i>=1;i--)cglh(i,op);
return 0;
}
void cglh(int x,int f)
{
if(lh[x]==f)return;
if(x>1)
{
cglh(x-1,1);
for(int i=x-2;i>=1;i--)
cglh(i,0);
}
lh[x]=f;
xh++;
cout<<xh<<":";
if(f)cout<<"掛上第"<<x<<"個環\n";
else cout<<"取下第"<<x<<"個環\n";
}
程序說明:如果要取下九連環,那輸入的要處理的環號就是9,然后選擇取下,再后就是輸入當前環的狀態(全掛上的就全輸入1)
如有不足主不吝賜教,謝謝你的閱讀!
