函数 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("%d", num);
时,你是否忘记了在num
前面加上&
? - hacckselse if ((n > 1) && (n % 2 != 0))
而不是else if ((n > 1) && (n % 2 == 0))
。 - Aliouelse
(或者根本就没有 else,只有那里的主体)吗?所有其他可能性已经被排除了。 - mah