进度日志20 (嵌套调用、递归法)

学习笔记1:函数的嵌套调用

进度日志20 (嵌套调用、递归法)

进度日志20 (嵌套调用、递归法)

编程:

#include <stdio.h>

long square(int p);  //实现平方
long factorial(int q);  //实现阶乘
//C语言不能嵌套定义,所以统一在外面声明
void main()
{
    int i;
    long s = 0;

    /*for (i = 2; i <= 3; i++)
    {
        s = s + square(i);
    }*/

    s = square(2) + square(3);
    printf("%1d\n", s);
}
long square(int p)
{
    int k;
    long r;
    long factorial(int);

    k = p * p;
    r = factorial(k);

    return r;
}
long factorial(int q)
{
    long c = 1;
    int i;
    for (i = 1; i <= q; i++)
    {
        c *= i;
    }
    return c;
}

学习笔记2:递归调用

在调用一个函数的过程中又出现直接或间接地 调用该函数本身 【自己调戏自己】

例如:

int f (int x)

{

    int y, z;

    z = f(y);

    return(2 * z);

}

在递归中必须要有一个退出的条件

进度日志20 (嵌套调用、递归法)

#include <stdio.h>

long recursion(int n);  //声明,告诉编译器有这个东西的存在

void main()
{
    int n;
    long result;

    printf("intput a integer number:\n");
    scanf("%d", &n);

    result = recursion(n);
    printf("%d!=%ld\n", n, result);
}
long recursion(int n)
 //定义,说明具体意义
{
    long temp_result;
    if (n < 0)
    {
        printf("n<0,input error!\n");
    }
    else if (n == 0 || n == 1)
    {
        temp_result = 1;
    }
    else
    {
        temp_result = recursion(n - 1)*n;
    }
    return temp_result;
}