☰
C语言day1递归和分治
2026/10/10 2:46:00 网站建设 项目流程
#include<stdio.h> int f(int n){ if(n>2){ int result=f(n-1)+f(n-2); return result; } else if(n==2){ return 2; } else if(n==1)} return 1; } } int main(){ int n=4; printf("f(n)=%d",f(n)); return 0;

1.爬梯子问题

void han(int n ,char qi,char buffer,char zhong){ if(n>1){ han(n-1,qi,zhong,buffer); han(1,qi,buffer,zhong); han(n-1,buffer,qi,zhong); } else if(n==1){ printf("move %c to %c \n",qi,zhong); } int main(){ int n=5; han(n,'a','b','c'); return 0; }

2.汉诺塔问题

void merge(int* arr,int* temp,int left,int mid,int right) { //arr[left]-arr[mid]和arr[mid+1]-arr[right]进行合并 //将arr的内容访问到temp中 for(int i=left;i<=right;++i) { temp[i]=arr[i]; } //i访问左半边,j访问右半边,k存放结果 int i,j,k; for(i =left,j=mid +1,k=left;i<=mid&&j<=right;++k){ if(temp[i]<temp[j]){ arr[k]=temp[i]; ++i; } else{ arr[k]=temp[j]; ++j; } //处理左边没放完的数据 while(i<=mid){ arr[k]=temp[i]; ++i; ++k; } //处理右边没放完的数据 while(j<=right){ arr[k]=temp[j]; ++j; ++k; } //合并做完 } } void mergeSort(int* arr,int *temp,int left,int right){ if(left<right){ int mid =(left+right)/2; mergeSort(arr,temp,left,mid); mergeSort(arr,temp,mid+1,right); merge(arr,temp,left,mid,right); } } int main(){ int arr[]={3,87,2,92,32,53,54,6,56,95}; int temp[10]; mergeSort(arr,temp,0,9); return 0; }

3.归并排序

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询