gpt4 book ai didi

c - C中的递归函数是如何工作的

转载 作者:太空狗 更新时间:2023-10-29 15:17:50 25 4
gpt4 key购买 nike

函数 fun(n) 定义如下:

fun(n) = 1                 (if n <=1)
fun(n) = fun(n/2) (if n is even)
fun(n) = 2*fun((n-1)/3) (if n> and n is odd)

我正在尝试编写一个递归函数来计算并返回结果。我刚开始学习递归,在执行此功能时我有点迷路了。有人可以纠正我并向我解释吗?谢谢!

这是我做的:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

int fun(int n);

int main()
{
int num;

printf("\nEnter a number: ");
scanf("%d", num);
printf("Result = %d\n", fun(num));
return 0;
}

int fun(int n)
{
if (n <= 1)
{
return 1;
}

else if (n % 2 == 0)
{
return fun(n / 2);
}

else if ((n > 1) && (n % 2 == 0))
{
return 2 * fun((n - 1) / 3);
}
}

预期输出:

Enter a number: 13
Result = 2

Enter a number: 34
Result = 4

我得到的输出是:

Enter a number: 13
Result = 1

Enter a number: 34
Result = 1

最佳答案

scanf接受一个指向 int指针作为 %d 的参数,即,

scanf("%d", &num);

另外,你的函数 fun不处理所有情况,可能会掉到底部:

if (n <= 1)
{
return 1;
}
else if (n % 2 == 0)
{
return fun(n / 2);
}
else if ((n > 1) && (n % 2 == 0))
{
return 2 * fun((n - 1) / 3);
}

最后else if永远不会满足条件,因为之前检查了 n % 2 == 0在那种情况下已经返回。还有 n > 1毫无意义,因为第一个 n <= 1在所有其他情况下返回。

你可以简单地做到:

else
{
return 2 * fun((n - 1) / 3);
}

关于c - C中的递归函数是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22510402/

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