递归和尾递归

// 递归求5!
// 基本递归

复制代码
#include <stdio.h>

int fun(int n)
{
    if (1 == n)
    {
        return 1;
    }
    else
    {
        return n*fun(n-1);
    }
    
}

int main(int argc, char *argv[])
{
    int num;
    scanf("%d", &num); // 输入num的值,要求大于1
    printf("%d! = %d", num, fun(num));
    return 0;
}

输入
5
输出:
5! = 120
复制代码

// 尾递归
// 1.当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归
// 2.尾递归调用,其实最精髓就是通过参数传递结果,达到不压栈的目的。

复制代码
#include <stdio.h>

int fun(int n, int temp)
{
    if (1 == n)
    {
        return temp;
    }
    else
    {
        fun(n-1, temp*n);
    }
}

int main(int argc, char *argv[])
{
    int num;
    int sum = 1;
    scanf("%d", &num); // 输入num的值,要求大于1
    printf("%d! = %d", num, fun(num, sum));
    return 0;
}

输入:
5
输出:
5! = 120
复制代码

 

posted @   jason8826  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示