递归方法是解决很多问题的绝妙武器。
课件PPT下载 递归函数
递归有些类似于数学归纳法的思想。
数学归纳法的思想是这样的:
1. 证明当 n = 1 时,命题成立;
2. 假设当 n = k 时,命题成立; 你需要证明 n = k + 1 时,命题也成立;
3. 由数学归纳法和 1、2,命题成立。
递归方法的使用是这样的:
假设函数名为 abc。
正如数学归纳法一样,递归的第一部分(if 语句)一定是当 n 等于一个很小的数时,做一件简单的事。如果这个前提条件不存在,递归就无法进行了。
在else部分,将 n 的问题转化为 n-1 的问题。
1 2 3 4 5 6 7 | int abc(int n) { if ( n==1 ) do_simple; else { do_something(和 abc(n-1) 有关); } } |
完成任务
1. 5个学生谈年龄
有5个学生坐在一起
问第5个学生多少岁?他说比第4个学生大2岁
问第4个学生岁数,他说比第3个学生大2岁
问第3个学生,又说比第2个学生大2岁
问第2个学生,说比第1个学生大2岁
最后问第1个学生,他说是10岁
请问第5个学生多大
2. 递归方法求 n!
n!等于多少? 等于 (n-1)! * n
1. 5个学生谈年龄
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> int age(int n); int main() { printf("NO.5,age:%d\n",age(5)); return 0; } int age(int n) { if (n==1) return 10; return age(n-1)+2; } |
2. 递归方法求 n!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> int fac(int n); int main() { int n, y; scanf("%d",&n); y=fac(n); printf("%d!=%d\n",n,y); return 0; } int fac(int n) { if(n==0||n==1) return 1; return fac(n-1)*n; } |
本题中函数并不会在实际中使用,因为效率太低。