递归和尾递归

// 递归求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 @ 2024-03-18 02:33  jason8826  阅读(2)  评论(0编辑  收藏  举报