从简单例子看递归

#include <stdio.h>

//以两个例子来初步的认识和实践应用递归,一个数的计算阶乘,生成斐波那契数列
//注意两个重要的点,递归就是一个函数引用它自身作为运算的形式,还有必须为递归限制一个条件来使它在正确的地方停下来

double factorial( int i)
{

    if (i <= 1)
    {
        return 1;
        //so,return factorial(1)=1  
    return i * factorial(i - 1);
    //这种情况下则return  factorial(2)=2 , factorial(3)=6.........
}

int  main()
{
    int i = 15;
    printf("%d 的阶乘为 %f\n", i, factorial(i));
    //15 的阶乘为 1307674368000.000000
    return 0;
}

int fibonaci(int i)
{
    if (i == 0)
    {
        return 0;
    }//这里可以确定前两项是0和1,往下就正常递归就可以了
    if (i == 1)
    {
        return 1;
    }
    return fibonaci(i - 1) + fibonaci(i - 2);
}

int  main()
{
    int i;
    for (i = 0; i < 10; i++)//确保输出i次,以及输出的内容
    {
        printf("%d\t\n", fibonaci(i));
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,我可以回答这个问题。递归程序是指函数调用自身的过程。下面是一个简单递归程序示例: ``` #include <stdio.h> int factorial(int n) { if (n == ) { return 1; } else { return n * factorial(n - 1); } } int main() { int n = 5; int result = factorial(n); printf("%d! = %d\n", n, result); return ; } ``` 这个程序计算了 5 的阶乘,即 5! = 5 * 4 * 3 * 2 * 1 = 120。在函数中,如果 n 等于 ,就返回 1;否则,就返回 n 乘以 factorial(n-1) 的结果。这个函数会一直递归调用自身,直到 n 等于 。 ### 回答2: 递归程序是指在程序执行过程中调用自身的过程。比如下面这个简单递归程序: ```C #include <stdio.h> int factorial(int n) { if (n <= 1) { return 1; } else { return n * factorial(n - 1); } } int main() { int num = 5; int result = factorial(num); printf("The factorial of %d is: %d\n", num, result); return 0; } ``` 此程序计算一个数的阶乘。函数`factorial`接收一个整数作为参数,若参数小于等于1,则返回1;否则,调用自身传入参数减一,并将其与当前参数相乘后返回。在`main`函数中,我们传入5作为参数,然后打印出计算结果。 递归主要包含两个要素:基本情况和递推关系。基本情况即递归的终止条件,在上述例子中是当n小于等于1时返回1;递推关系即递归调用自身的过程,在上述例子中是调用`factorial(n - 1)`。 值得注意的是,递归程序必须有一个明确的终止条件,否则会陷入无限递归,导致栈溢出等问题。同时,递归的效率一般较低,因为每次调用函数都需要保存当前的状态信息,而且递归过程需要不断地进行函数调用和返回。 ### 回答3: 递归程序是指一个函数调用自身的过程。在递归过程中,问题被分解为更小的子问题来解决,然后再将这些子问题的解组合起来得到最终结果。 递归程序的基本思想是:通过一个递归函数,使用相同的函数来处理规模较小的问题,直到问题的规模足够小,可以直接得到解决方案,然后将这些解决方案逐层返回,最终得到原始问题的解。 递归程序通常分为两个部分:基本情况(base case)和递归情况(recursive case)。基本情况是指问题规模足够小,可以直接求解的情况。递归情况是指将问题分解为更小的子问题,通过调用相同的递归函数来解决。 递归程序的编写需要注意以下几个要点: 1. 确定基本情况,即问题规模足够小,可以直接求解。 2. 确定递归情况,即将问题分解为更小的子问题。 3. 确定递归函数的参数和返回值。 4. 确保递归过程中能够不断向基本情况靠近,以避免无限递归引发栈溢出等问题。 举例说明,实现一个递归函数计算一个正整数的阶乘: ```python def factorial(n): # 基本情况:当n等于0或1时,直接返回1 if n == 0 or n == 1: return 1 # 递归情况:将问题分解为n乘以(n-1)的阶乘 else: return n * factorial(n-1) ``` 在上述代码中,基本情况是当n等于0或1时,直接返回1。递归情况是将问题转化为n乘以(n-1)的阶乘,通过调用相同的递归函数来求解。最终,当递归到n等于0或1时,不再进行递归调用,直接返回1,并将递归函数的结果层层返回,得到原始问题的解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值