任务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("未找到该元素!"); }
} |