被問到n個樓階 每次只能走2步或1步 有幾種走法
可惜當時腦袋茫然 從被提醒recursive要怎麼做就沒搞懂原由

其實這也算蠻典型的遞迴問題 但太久沒碰
無法聯想要怎麼做

遞迴作法
int step(int n)
{
if(n==1) //先走一步的方法數
  return 1;

else if(n==2) //先走兩步的方法數
 return 2;

if(n>2)
  return step(n-1)+step(n-2)
}

被問到轉換成loop該怎麼做 腦袋空白 亂答一通
走到捷運已經知道自己錯了 覺得好羞愧 才想到作法

int Step(int n)
{

   int step[2]; //方法數
   int temp;

   //initialize
   step[0]=1; //走一步方法數
   step[1]=2; //走兩步方法數

   if(n==1) //只有一階
     step[1]=1;
   else if(n==2) //只有二階
     step[1]=2;
   else if(n<1) //無階
     step[1]=0;
   else
   {
    //轉成像遞迴形式 step[n]=step[n-1]+step[n-2]
    for(i=3;i<=n;i++)
    {
       temp=step[1];
        step[1]=step[0]+step[1];//走第i步需要的方法數存回step[1]
       step[0]=temp;
    }
   }
   return step[1];
}

雖然失敗 但也只能想算是幫忙複習一遍遞迴 得到經驗值了

arrow
arrow
    全站熱搜

    lalalah 發表在 痞客邦 留言(0) 人氣()