任務1:計算斐波那契數列,首元素從序號0 開始
任務描述:分別利用遞歸和迭代法輸出斐波那契數列的第n項的值,檢查輸出結果的正確性。將代碼複製粘貼到方框中,將運行結果截圖。
算法輸入:7
算法輸出:斐波那契數列中第n項=21
//遞歸法 #include<stdio.h> int fun(int n){ if(n==0||n==1) return 1; else return fun(n-1)+fun(n-2); } int main(void){ int n,i=0; printf("請輸入要輸出第幾項:"); scanf("%d",&n); if(n>=1) for(i=0;i<n;i++){ printf("斐波那契數列的第%d項是:%d",i+1,fun(i+1)); } else printf("輸入錯誤,請重新輸入!"); return 0; }
//迭代法 #include<stdio.h> main(){ int a,b,c; int i,n; printf("請輸入一個正整數:"); scanf("%d",&n); a=b=1; if(n<=2) c=1; else for(i=2;i<=n;i++){ c=a+b; a=b; b=c; } printf("第%d項的爲:%d\n",n,c);
} |
任務2:漢諾塔問題。
任務描述:修改代碼輸出漢諾塔問題的全部移動步驟,初始狀態所有圓盤在B塔,要求移動到A塔。將代碼複製粘貼到方框中,將運行結果截圖。
void hanoi(int n,char a,char b,char c)
{//把n個盤子從a柱移動到c柱
if(n>0)
{
hanoi(n-1,a,c,b);//n-1個盤子從a移動到b
printf("%c->%c\n",a,c);//1個盤子從a移動到c
hanoi(n-1,b,a,c);//n-1個盤子從b移動到c
}
}
#include <stdlib.h>
void main() { int n; scanf ("%d",&n); hanoi (n,'b','c','a');
}
void hanoi(int n,char b,char c,char a) {//把n個盤子從b柱移動到a柱 if(n>0) { hanoi(n-1,b,a,c);//n-1個盤子從b->c printf("%c->%c\n",b,a);//1個盤子從b->a hanoi(n-1,c,b,a);//n-1個盤子從c-a } else if(n==1) printf("%c->%c\n",b,a);//直接從b->c } |
任務3:有序序列的二分搜索(遞歸)算法的設計與實現
任務描述:閱讀下面的代碼,完成括號中的關鍵代碼,完善程序,利用遞歸技術實現二分搜索,檢查結果的正確性,將代碼粘貼到方框中。
int BinSearch(int a[ ],int low, int high, int key)
{
if (low<=high)
{
int mid = (low+high)/2;//一分爲二
if( )
return mid;//找到key,返回所在位置(遞歸結束)
else if(key<a[mid])
( )//遞歸求解
else if(key>a[mid])
( )//遞歸求解
}
else
return -1;//未找到返回-1
}
#include<stdio.h> #include<stdlib.h> void main(){ int a[5],i,key; int low = 0; int high = sizeof(a)/sizeof(a[0]) -1 ;
printf("input array:"); for(i=0;i<=4;i++){ scanf("%d",&a[i]); }
printf("input key number:"); scanf("%d",&key);
//進行二分查找 while(low<=high){ int mid = (low+high)/2; if(key>a[mid]) { low = mid +1; } else if(key<a[mid]) { high = mid -1; } else { printf("目標元素數組下標是%d",mid); break; } } if(low>high) { printf("未找到該元素!"); }
} |