【发布时间】:2015-09-10 06:15:45
【问题描述】:
我在使用递归理解这段代码方面需要帮助。
int power(int n1,int n2);
int main()
{
int base, exp;
printf("Enter base number: ");
scanf("%d",&base);
printf("Enter power number(positive integer): ");
scanf("%d",&exp);
printf("%d^%d = %d", base, exp, power(base, exp));
return 0;
}
int power(int base,int exp)
{
if ( exp!=1 )
return (base*power(base,exp-1));
}
代码运行良好,但我不明白为什么当exp 为 1 时它仍然能够返回一个值,即使函数体中的条件评估为假,所以我认为它不应该返回任何东西。
例如,如果在main() 函数中调用该函数,并且我将5 和1 的值分别分配给base 和exp,我希望我不应该得到返回值,因为 exp 是 1 并且我的函数仅在 exp !=1 时返回一些东西,而且函数体中没有 else 部分来涵盖 exp 是 1 的情况。
我知道 C 在未指定返回值时返回垃圾值,但在这种情况下,它返回正确的答案,我对其进行了多次测试。例如,当我在主函数中使用base=7 和exp=1 调用它时,它返回7 作为我的答案,即使使用其他“基数”值,它也总是返回正确答案的基数。这正是我困惑的根源——当函数体的 IF 子句评估为假时,C 如何设法向我返回正确的答案......
我想我在这里遗漏了一些东西。
【问题讨论】:
-
您的代码调用未定义行为,因为当
exp为 1 时,您不会返回int。该函数将从内存中返回“随机”、“垃圾”值。所以任何事情都可能是结果。 -
exp = 1时不返回,但如果在调用函数时抓到返回值,就会是内存中的垃圾值
-
我知道 C 在未指定返回值时返回垃圾值,但在这种情况下,它返回正确答案,我测试了几次。例如,当我在主函数中使用 base = 7 和 exp =1 调用它时,它返回 7 作为我的答案,即使使用其他“base”值,它也总是返回正确答案的 base。这正是我困惑的根源 - 当函数体的 IF 子句评估为 false 时,C 如何设法向我返回正确答案......
标签: c function recursion return-value