1. 求n!(這里附加一個(gè)限制條件:0<=n<=12)
源代碼:
#include <stdio.h>int fun(int n){ if(n==0 || n==1) return 1; else return n*fun(n-1);}int main(){ int n; while(scanf("%d",&n)!=EOF) PRintf("%d!=%d/n",n,fun(n)); return 0;}程序截圖:
2. 遞歸解決年齡問題:
有5個(gè)學(xué)生坐在一起,問第5個(gè)學(xué)生的年齡,他說比第4個(gè)學(xué)生大2歲,問第4個(gè)學(xué)生的年齡,他說比第3個(gè)學(xué)生大2歲,問第3個(gè)學(xué)生的年齡,他說比第2個(gè)學(xué)生大2歲,問第2個(gè)學(xué)生的年齡,他說比第1個(gè)學(xué)生大2歲,問第1個(gè)學(xué)生的年齡,他說他10歲。
問第2.3.4.5個(gè)學(xué)生年齡多大?
源代碼:
#include <stdio.h>int age(int n){ if(n==1) return 10; else return age(n-1)+2;}int main(){ int n; while(scanf("%d",&n)!=EOF) printf("第%d個(gè)人: %d歲/n",n,age(n)); return 0;}程序截圖:
3. 計(jì)算組合數(shù)C(m, n)
法一:使用組合數(shù)計(jì)算公式
源代碼:
#include <stdio.h>int fun(int n) //需要注意直接使用公式時(shí)在int精度范圍內(nèi)可表示的數(shù)的范圍十分有限,故局限性比較大{ if(n==0|| n==1) return 1; else return n*fun(n-1);}int Cmn(int m,int n){ int result; if(m<0 || n<0 || m<n) result=0; else result=fun(m)/(fun(n)*fun(m-n)); return result;}int main(){ int m,n; while(scanf("%d %d",&m,&n)!=EOF) printf("C(%d,%d)=%d/n",m,n,Cmn(m,n)); return 0;}法二:使用組合數(shù)遞推公式源代碼:
#include <stdio.h>int Cmn(int m,int n){ if(m<0 || n<0 || m<n) return 0; if(m==n) return 1; if(n==1) return m; return Cmn(m-1,n)+Cmn(m-1,n-1);}int main(){ int m,n; while(scanf("%d %d",&m,&n)!=EOF) printf("C(%d,%d)=%d/n",m,n,Cmn(m,n)); return 0;}程序截圖:
4. 用遞歸方法求解兩個(gè)正整數(shù)的最大公約數(shù)
源代碼:
#include <stdio.h>int gcd(int a,int b) //結(jié)合輾轉(zhuǎn)相除法思想分析遞歸過程 { if(b==0) //跳出while(b!=0)循環(huán)后,a的值即為所求的最大公約數(shù) return a; else //未跳出循環(huán)時(shí),把b的值作為下一次遞歸時(shí)a的值,a%b的值作為下一次遞歸時(shí)b的值 return gcd(b,a%b); }int main(){ int m,n; while(scanf("%d %d",&m,&n)!=EOF) printf("%d/n",gcd(m,n)); return 0; }程序截圖:
5. 逆序輸出一個(gè)正整數(shù)n的各位數(shù)字
源代碼:
#include <stdio.h>void fun(int n){ if(n) { printf("%d",n%10); fun(n/10); }}int main(){ int n; while(scanf("%d",&n)!=EOF) { fun(n); printf("/n"); } return 0; }程序截圖:
6. 將一個(gè)10進(jìn)制正整數(shù)轉(zhuǎn)換為m進(jìn)制數(shù)(2<=m<10)
源代碼:
#include <stdio.h>void fun(int n,int m){ if(n>0) { fun(n/m,m); printf("%d",n%m); }}int main(){ int n,m; while(scanf("%d %d",&n,&m)!=EOF) { fun(n,m); printf("/n"); } return 0; }程序截圖:
附各題思路分析及要點(diǎn)整理:




新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注