标签:c 递归经典实例
1
菲波那切数列:求第N个数列的值
#include <stdio.h>
long long Fib(int n){
return (n == 1 || n == 2) ? 1 : Fib(n - 1) + Fib(n - 2);
}
int main(){
printf("%ld\n",Fib(40));
}C:\MinGW\project>gcc -std=c99 main.c C:\MinGW\project>a.exe 102334155
递归求出年龄:
每一个人比前面一个人大2岁,最前面那个人是10岁,求第n个人的年龄
#include <stdio.h>
int recurse(int n){
int i;
if(n==1) i=10;
else i=recurse(n-1)+2;
return i;
}
int main(){
printf("age = %d",recurse(20));
}C:\MinGW\project>gcc str.c C:\MinGW\project>a.exe age = 48
汉诺塔问题
#include <stdio.h>
long num=0;
void hanoi(int n,char A,char B,char C){//理解为:有n个盘子在A上,通过B,移到C
if(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);
}
}
int main(){
int n=0;
printf("请输入盘子的个数\n");
scanf("%d",&n);
printf("盘子的移动方向如下\n");
hanoi(n,‘A‘,‘B‘,‘C‘);
}C:\MinGW\project>gcc main.c C:\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
本文出自 “魂斗罗” 博客,请务必保留此出处http://990487026.blog.51cto.com/10133282/1770161
标签:c 递归经典实例
原文地址:http://990487026.blog.51cto.com/10133282/1770161