1

菲波那切数列:求第N个数列的值

#include<stdio.h>longlongFib(intn){return(n==1||n==2)?1:Fib(n-1)+Fib(n-2);}intmain(){printf("%ld\n",Fib(40));}

C:\MinGW\project>gcc-std=c99main.cC:\MinGW\project>a.exe102334155





递归求出年龄:

每一个人比前面一个人大2岁,最前面那个人是10岁,求第n个人的年龄

#include<stdio.h>intrecurse(intn){inti;if(n==1)i=10;elsei=recurse(n-1)+2;returni;}intmain(){printf("age=%d",recurse(20));}

C:\MinGW\project>gccstr.cC:\MinGW\project>a.exeage=48


汉诺塔问题

#include<stdio.h>longnum=0;voidhanoi(intn,charA,charB,charC){//理解为:有n个盘子在A上,通过B,移到Cif(n==1)printf("第%ld步:\t%c->%c\n",++num,A,C);else{hanoi(n-1,A,C,B);printf("第%ld步:\t%c->%c\n",++num,A,C);hanoi(n-1,B,A,C);}}intmain(){intn=0;printf("请输入盘子的个数\n");scanf("%d",&n);printf("盘子的移动方向如下\n");hanoi(n,'A','B','C');}

C:\MinGW\project>gccmain.cC:\MinGW\project>a.exe请输入盘子的个数5盘子的移动方向如下第1步:A->C第2步:A->B第3步:C->B第4步:A->C第5步:B->A第6步:B->C第7步:A->C第8步:A->B第9步:C->B第10步:C->A第11步:B->A第12步:C->B第13步:A->C第14步:A->B第15步:C->B第16步:A->C第17步:B->A第18步:B->C第19步:A->C第20步:B->A第21步:C->B第22步:C->A第23步:B->A第24步:B->C第25步:A->C第26步:A->B第27步:C->B第28步:A->C第29步:B->A第30步:B->C第31步:A->C




求数的和

chunli@ubuntu:/tmp$catsum.c#include<stdio.h>intsum(intn){if(n==1)return1;elsereturnn+sum(n-1);}intmain(){printf("sum=%d\n",sum(10));}chunli@ubuntu:/tmp$gccsum.c;./a.outsum=55



求1到n之间质数的和

#include<stdio.h>intisprime(intn,intkey)//判断n是否为素数,是返回1,不是返回0{if(n<2)return0;if(n==key)return1;if(n%key==0)return0;//除了1和他本身以外,有余数,证明不是素数,返回假elsereturnisprime(n,key+1);}intsum(intn)//求1到n之间所有素数之和{if(n==1)return1;else{if(isprime(n,2))returnn+sum(n-1);//如果n为素数,递归求和elsereturnsum(n-1);//如果n不为素数,只递归,不求和}}intmain(){printf("1--2质数和%d\n",sum(2));printf("1--3质数和%d\n",sum(3));printf("1--10质数和%d\n",sum(10));}chunli@ubuntu:/tmp$./a.out1--2质数和31--3质数和61--10质数和18