递归就是函数自己调用自己
求n的阶乘
n! = n * (n - 1)!
直到n为1或者0的时候为止
举个例子
int Fun(int n)
{if (n <= 0){return 1;}else{return n * Fun(n - 1);}
}int main()
{int n = 0;scanf("%d", &n);int ret = Fun(n);printf("%d\n", ret);return 0;
}
画图如下所示
顺序打印整数的每一位
void Print(int n)
{if (n > 9)Print(n / 10);printf("%d ", n % 10);
}int main()
{int m = 0;scanf("%d", &m);Print(m);return 0;
}
求第n个斐波那契数
int Fib(int n)
{if (n <= 2)return 1;elsereturn Fib(n - 1) + Fib(n - 2);
}int main()
{int n = 0;scanf("%d", &n);int ret = Fib(n);printf("%d\n", ret);return 0;
}
青蛙跳台阶问题
一只青蛙一次只能跳1级或者2级台阶,问青蛙跳上第n级台阶一共有多少种跳法
int Func(int n)
{if (n == 1)return 1;else if (n == 2)return 2;elsereturn Func(n - 1) + (n - 2);
}int main()
{int m = 0;scanf("%d", &m);int ret = Func(m);printf("%d\n", ret);return 0;
}
也就是说,一个台阶只能跳一步跳一次,如果有两步,就有两种情况,可以跳两次一步,也可以跳一次两步
汉诺塔问题
int count;
void move(char A, char C, int n)
{printf("把第%d个圆盘从%c->%c\n", n, A, C);count++;
}void Hanno(char A, char B, char C, int n)
{if (n == 1){move(A, C, n);}else{//将n-1个圆盘从A柱借助于C柱移动到B柱上Hanno(A, C, B, n - 1);//将A柱子最后一个圆盘移动到C柱上move(A, C, n);//将n-1个圆盘从B柱借助于A柱移动到C柱上Hanno(B, A, C, n - 1);}
}int main()
{int n = 0;printf("输入A柱子上的圆盘个数:");scanf("%d", &n);//将n个圆盘从A柱借助于B柱移动到C柱上Hanno('A', 'B', 'C', n);printf("一共移动了%d次圆盘", count);return 0;
}
有A,B,C三个杆子,要将A上面的按顺序移到C上面,并且只能大的在下,小的在上