1. 程式人生 > 其它 >習題10(遞迴函式)

習題10(遞迴函式)

1、編寫函式midfind:功能為用二分查詢法在n個數中查詢指定數字的位置。

程式設計實現:在任意6個升序排列的數中查詢指定數字的位置。

#include<stdio.h>

int midfind(int ch[],int n)

{

int i,mid,s=0,e=5;

while(s<=e)

{

mid=(s+e)/2;

if(ch[mid]==n) break;

if(ch[mid]>n) e=mid-1;

if(ch[mid]<n) s=mid+1;

}

if(s>e) return -1;

else return mid;

}

void main()

{

int ch[6],n,re,i;

printf("請輸入一組數字:");

for(i=0;i<6;i++)

scanf("%d",&ch[i]);

printf("請輸入要查詢的數字:");

scanf("%d",&n);

re=midfind(ch,n);

if(n==-1)

printf("找不到%d",n);

else

printf("找到了,%d在%d位置\n",n,re);

}


2、編寫函式trans:功能為4行4列的矩陣轉置

程式設計實現:對任意4行4列的矩陣轉置輸出

#include <stdio.h>

void trans(int x[4][4])

{

int i,j,t;

for(i=0;i<4;i++)

{

for(j=i;j<4;j++)

{

if(i!=j)

{

t=x[i][j];

x[i][j]=x[j][i];

x[j][i]=t;

}

}

}

}

void main()

{

int a[4][4],n,m;

printf("請輸入一個矩陣資料:");

for(n=0;n<4;n++)

{

for(m=0;m<4;m++)

{

scanf("%d",&a[n][m]);

printf("%3d ",a[n][m]);

}

printf("\n");

}

printf("轉置後的矩陣為:\n");

trans(a);

for(n=0;n<4;n++)

{

for(m=0;m<4;m++)

{

printf("%3d ",a[n][m]);

}

printf("\n");

}

}

3、編寫函式insert:功能為在一個字串中指定位置插入指定字元,若指定位置大於等於字串長度則是把字元追加到字串最後。程式設計實現:對任意輸入的字串中指定位置插入指定字元。

#include <stdio.h>

#include <string.h>

char insert(char ch[],char c,int p)

{

int i,len=strlen(ch);

if(p<len)

{

for(i=len;i>p;i--)

{

ch[i]=ch[i-1];

}

ch[p]=c;

}

else

{

ch[len]=c;

}

}

void main ()

{

char x[]={"0"};

int i,j,p,c,len;

printf("請輸入字串:");

gets (x);

printf("請輸入需插入的字元和位置:");

scanf("%c%d",&c,&p);

printf("插入後的字串:");

insert(x,c,p);

puts(x);

}

4、程式設計實現:輸出第n天的桃子數。猴子第一天摘下若干個桃子,立即吃了一半,還不過癮又多吃了一個,第二天將第一天剩下的桃子吃了一半又多吃了一個,以後每天以這個規律吃下去,到第十天再去吃時發現只剩下一個桃子。

編寫遞迴函式peach:功能為第n天的桃子數

#include <stdio.h>

int peach(int day)

{

if(day==10)

return 1;

else

return 2*(peach(day+1)+1);

}

int main()

{

int n;

printf("你想知道第幾天的桃子數量嗎?:");

scanf("%d",&n);

if(n>0 && n<=10)

{

printf("第%d天有%d個桃子\n",n,peach(n));

}

else

printf("沒有桃子!");

}

5、程式設計實現:求組的值。m個的元素中取出n個元素的不同取法個數。,當n=m或者m=0時值是1。

方法1編寫遞迴函式fun:功能為求任意一個正整數或者0的階乘。

#include <stdio.h>

#include <stdlib.h>

long int fun(int x)

{

if(x==0||x==1) return 1;

else return fun(x-1)*x;

}

int main( )

{

int m, n;

printf("請輸入元素個數和抽取的個數:");

scanf("%d %d",&m, &n);

if(m>=n)

printf("%d個元素中抽取%d個的組合有%d",m,n,fun(m)/(fun(m-n)*fun(n)));

else

printf("個數輸入錯誤!");

}

方法2編寫遞迴函式zhuhe:功能為求組的值。

#include <stdio.h>

#include <stdlib.h>

long int zhuhe(int n,int m)

{

if(m>n) return 0;

else if(m==n || m==0)

return 1;

else

return zhuhe(n-1,m)+zhuhe(n-1,m-1);

}

int main( )

{

int m, n;

printf("請輸入元素個數和抽取的個數:");

scanf("%d %d",&m, &n);

if(m>=n)

printf("%d個元素中抽取%d個的組合有%d",m,n,zhuhe(m,n));

else

printf("個數輸入錯誤!");

}

小胖專屬學習分享