//递归函数求阶乘
long factorial(int n)
{
int f;
if(n==1||n==0)
{
f = 1;
}
else
{
f = factorial(n-1)*n;
}
return f;
}
int main()
{
int n;
long num;
printf("please input a number:\n");
scanf("%d",&n);
printf("%d! = %ld",n,factorial(n));
return 0;
}
汉诺塔问题
个人理解:
只要能够意识到内部循环即递归即可理解解题思路。
需要移动4片时需要移动3片作为前提,需要移动3片时需要移动2片为前提…
- 第一步是把n-1片从a移动到b,c作为工具柱
- 第二步把a最下面一个移动到c上
- 第三步把b上n-1片的移动到c上。(有没有发现这个和第一步完全一致只不过是把柱子的序号变了)
换成另一种方式:
(hanoi(x,y,z)是汉诺塔移动的函数,x是出发柱,z是目标柱,y是工具柱)
- hanoi(n-1,a,c,b)
- a–>c
- hanoi(n-1,b,a,c)
//用递归完成Hanoi塔(汉诺塔)
extern long long number = 0;
void hanoi(int n,char a,char b, char c)
{
if(n==1)
{
printf("%c-->%c\n",a,c);
number++;
}
else
{
hanoi(n-1,a,c,b);
printf("%c-->%c\n",a,c);
number++;
hanoi(n-1,b,a,c);
}
}
int main()
{
int num;
printf("please input num:\n");
scanf("%d",&num);
hanoi(num,'a','b','c');
printf("需要%d步",number);
return 0;
}
Fibonacci数列
//Fibonacci数列
int fib(int num)
{
int f;
if(num==1||num==2)
{
f = 1;
}
else
{
f = fib(num-1)+fib(num-2);
}
return f;
}
int main()
{
int number,result;
printf("please input a number:\n");
scanf("%d",&number);
result = fib(number);
printf("the resualt is: %d\n",result);
return 0;
}
用递归方法实现:输入小于32768的数字按逆序输出
//用递归方法实现:输入小于32768的数字按逆序输出
void reverse(int x)
{
int y;
y = x%10;
printf("%d",y);
x = x/10;
if(x>1)
reverse(x);
}
int main()
{
int number;
printf("please input a number:\n");
scanf("%d",&number);
reverse(number);
return 0;
}