函数的递归调用,C语言函数递归调用完全攻略

**

文章地址

**
下面给大家编写几个程序,列举几个例子,主要通过例子让大家对递归有一个了解。

1) 用递归求 n 的阶乘。

n!也可以写成 n×(n–1)!,这就是递归公式。

# include <stdio.h>
long Factorial(int n);  //函数声明
int main(void)
{
    int n;
    printf("请输入n的值:");
    scanf("%d", &n);
    printf("%d! = %ld\n", n, Factorial(n));
    return 0;
}
long Factorial(int n)  //阶乘的英文为factorial
{
    if (n < 0)
    {
        return -1;
    }
    else if (0==n || 1==n)  /*关系运算符的优先级大于逻辑运算符的优点级, 所以不用加括号*/
    {
        return 1;
    }
    else
    {
        return n * Factorial(n-1);
    }
}

输出结果是:
请输入n的值:10
10! = 3628800

n 的值不要太大,不然容易溢出,long 类型也放不下。

2) 用递归实现 1+2+3+…+100 的和

求和的递归公式跟求阶乘的递归公式很相似:Sum(n)=n+Sum(n–1)。

# include <stdio.h>
int Sum(int n);  //函数声明
int main(void)
{
    int n;
    printf("请输入n的值:");
    scanf("%d", &n);
    printf("sum = %d\n", Sum(n));
    return 0;
}
int Sum(int n)
{
    if (n <= 0)
    {
        return -1;
    }
    else if (1 == n)
    {
        return 1;
    }
    else
    {
        return n+Sum(n-1);
    }
}

输出结果是:
请输入n的值:100
sum = 5050

3) 用递归求斐波那契数列。

所谓斐波那契数列是指数列中每一个数值都是其前两个数值之和,即:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368……

# include <stdio.h>
long Fibonacci(int n);  //函数声明
int main(void)
{
    int n;
    printf("请输入n的值:");
    scanf("%d", &n);
    printf("第n项的值为:%ld\n", Fibonacci(n));
    return 0;
}
long Fibonacci(int n)
{
    if (n < 0)
    {
        return -1;
    }
    else if (0 == n)
    {
        return 0;
    }
    else if (1 == n)
    {
        return 1;
    }
    else
    {
        return Fibonacci(n-1)+Fibonacci(n-2);
    }
}

输出结果是:
请输入n的值:21
第n项的值为:10946

通过上面这几个程序我们发现递归都有一个共同的特点,就是递归公式全部都是写在 return 语句后面的,而且最小事件的解都会返回一个具体的值。如果最小事件的解不返回一个具体值的话,那么递归就无法停下来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值