gpt4 book ai didi

c - 递归和静态变量

转载 作者:行者123 更新时间:2023-11-30 17:23:01 25 4
gpt4 key购买 nike

代码的目标:返回数字的数字之和。

以下代码对于 123 返回 24,对于 1234 返回 50,对于 12345 返回 90。(变量 Sum 是静态的)如何跟踪输出?

(6x4 = 24、10x5 = 50、15x6 = 90)

我试图了解静态变量是如何插入堆栈的。 (压入的是变量还是它的地址?)

//sum of digits using recursion
#include<stdio.h>
int find_digits(int );

int main()
{
int num;
printf("Enter a number\n");
scanf("%d", &num);
int sum = 0;
printf("\nThe sum of the digits is %d", sum);
sum = find_digits(num);
printf("\nThe sum of the digits is %d", sum);
}

int find_digits(int num)
{
int digit = num%10;
printf("\nDigit is %d", digit);
static int sum=0;
sum += digit;
printf("\nsum is %d", sum);
if(num<=0)
{
printf("\n1. Num is %d and sum is %d", num, sum);
return sum;
}
else
{
printf("\n2. Num is %d and sum is %d", num, sum);
return (sum + find_digits(num/10));
}
}

最佳答案

函数find_digits的静态变量sum分配在全局地址空间中。它在程序执行开始时初始化为零(或由链接器设置为其初始化值)。

该变量未分配在堆栈上。在您的示例中,此静态变量的被插入堆栈(调用 printf)。

每次调用 find_digits 时该变量都是相同的,也就是说,该函数仅对一个变量(内存地址)进行操作,与递归深度无关。'

以“123”作为输入,sum 首先设置为 3,然后在下一次调用 find_digits 时,它递增 2 到 5,然后递增 1 到 6,然后递归展开并求和(现在是6)加上find_digits的返回值,即sum(即6),现在是12,加上find_digits的返回值(即sum,现在是12),所以是24。

关于c - 递归和静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27775546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com