gpt4 book ai didi

c - C 中的递归、段错误混淆

转载 作者:行者123 更新时间:2023-11-30 19:13:49 26 4
gpt4 key购买 nike

#include <stdio.h>

#define ARRAY_LEN 45

int howmany (int table[] , int number , int frequency , int index) {

if (index <= ARRAY_LEN) {

if (table[index] == number) {
frequency++;
}
howmany(table , number , frequency , index++);

}
return frequency;
}

int main(void) {
int array[] = {9,8,7,6,5,4,3,2,1,2,3,4,5,6,7,8,9,9,8,7,6,5,4,3,4,5,6,7,8,9,9,8,7,6,5,6,7,8,9,9,8,7,8,9,9};
int frequency = 0;
int chosen;

printf("Select chosen number\n");
scanf("%d" , &chosen);

frequency = howmany(array ,chosen ,frequency , 0);

printf("Frequency of %d is %d times.\n" , chosen , frequency);

return 0;
}

所以我明天有考试,我在这个简单的程序中遇到了问题,该程序通过递归计算在表中找到一个数字的次数。请帮助我找到问题,因为调试器在我调用函数 howmany 的行中发现问题,但我似乎无法检测到它是什么。谢谢

最佳答案

你的函数太复杂而且错误。

对于初学者来说,具有 45 元素的数组的有效索引范围是 0-44

或者在这次通话中

howmany(table , number , frequency , index++);
^^^^^^^

变量index的当前值被传递给函数,而不是像示例那样增加的值

howmany(table , number , frequency , ++index);
^^^^^^^^

此外,变量Frequency不会累加变量number的值在数组中出现的次数。

该函数可以写得更简单,只需一行即可。

这是一个演示程序。

#include <stdio.h>

size_t how_many ( const int a[] , size_t n, int value )
{
return n == 0 ? 0 : ( a[0] == value ) + how_many( a + 1, n - 1, value );
}

int main( void )
{
int a[] =
{
9, 8, 7, 6, 5, 4, 3, 2, 1, 2, 3, 4, 5, 6, 7,
8, 9, 9, 8, 7, 6, 5, 4, 3, 4, 5, 6, 7, 8, 9,
9, 8, 7, 6, 5, 6, 7, 8, 9, 9, 8, 7, 8, 9, 9
};
const size_t N = sizeof( a ) / sizeof( *a );

int chosen;

printf( "Select chosen number: ");
scanf( "%d" , &chosen );

size_t frequency = how_many( a, N, chosen );

printf( "Frequency of %d is %zu times.\n" , chosen , frequency );

return 0;
}

程序输出可能如下所示

Select chosen number: 7
Frequency of 7 is 7 times

.

关于c - C 中的递归、段错误混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35113353/

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