鱼C论坛

 找回密码
 立即注册
查看: 404|回复: 1

[已解决]c语言 递归 流程控制

[复制链接]
发表于 2020-4-17 15:24:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>


void main()
{
        long recursion(int n);
        int n;
        long result;
        printf("input 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;//这里②
}
调试过程在long recursion(int n)中,进行到return temp_result;(即②处),函数没有以temp_result的值作为返回值直接跳出,而是又返回temp_result = recursion(n - 1) * n;(即①处),继续调试,以①到②,②到①,来回多次。
而我一直觉得只要一到②处,就应该直接输出返回值,结束函数。

最佳答案
2020-4-17 15:49:34
你这是递归,
每次调用函数都是到②处结束函数的。
之所以看到多次在①和②之间来回跳,是因为多次递归调用了recursion()函数
假如输入的是3
第一次调用函数,n=3,运行到①,进行递归调用
         第二次调用函数,n=2,运行到①,进行递归调用
                第三次调用函数,n=1,运行else if
                运行到②处,第三次调用结束,函数返回
        返回到①处,继续执行,运行②处,第二次调用结束,函数返回
返回到①处,继续执行,运行②处,第一次调用结束,函数返回
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-17 15:49:34 | 显示全部楼层    本楼为最佳答案   
你这是递归,
每次调用函数都是到②处结束函数的。
之所以看到多次在①和②之间来回跳,是因为多次递归调用了recursion()函数
假如输入的是3
第一次调用函数,n=3,运行到①,进行递归调用
         第二次调用函数,n=2,运行到①,进行递归调用
                第三次调用函数,n=1,运行else if
                运行到②处,第三次调用结束,函数返回
        返回到①处,继续执行,运行②处,第二次调用结束,函数返回
返回到①处,继续执行,运行②处,第一次调用结束,函数返回
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 22:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表