现在的位置: 首页 > 06 函数 > 正文

递归函数

2011年04月09日 06 函数 ⁄ 共 753字 ⁄ 字号 暂无评论

递归方法是解决很多问题的绝妙武器。

课件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;
}

本题中函数并不会在实际中使用,因为效率太低。

抱歉!评论已关闭.