递归
int fun(int x,int y){
if(x==1)
return x;
else
return x*fun(x,y-1);
}
void main()
{
int x,n;
scanf("%d%d",&x,&n);
printf("%d",fun(x,n));
}
用递归实现x的n次,我这个代码没有输出结果求大佬帮忙看看。 本帖最后由 sfqxx 于 2023-4-1 22:36 编辑
你的代码没有问题,但是在调用 `fun()` 函数时,第二个参数 `y` 的值一直减一,最终递归到 `y = 0` 的时候就没有返回值了,所以没有输出结果。你可以在第一个递归条件中添加 `y > 0` 的判断,来避免这种情况的出现,代码如下:
def fun(x, y):
if x == 1 or y == 0:# 添加 y > 0 的判断
return x
else:
return x * fun(x, y - 1)
x = int(input("请输入底数 x:"))
n = int(input("请输入指数 n:"))
result = fun(x, n)
print(f"{x} 的 {n} 次方为:{result}")
你可以将其转化为 C 语言代码,如下:
#include <stdio.h>
int fun(int x, int y) {
if (x == 1 || y == 0) {
return x;
} else {
return x * fun(x, y - 1);
}
}
int main() {
int x, n;
scanf("%!d(MISSING)%!d(MISSING)", &x, &n);
int result = fun(x, n);
printf("%!d(MISSING) 的 %!d(MISSING) 次方为:%!d(MISSING)", x, n, result);
return 0;
}
在你的递归函数中,你需要检查y的值,而不是x。请参考以下修改后的代码:
#include <stdio.h>
int fun(int x, int y) {
if (y == 0) { // 修改了这里
return 1;
} else {
return x * fun(x, y - 1);
}
}
int main() {
int x, n;
scanf("%d%d", &x, &n);
printf("%d\n", fun(x, n));
return 0;
}
这个修改后的代码将实现你想要的功能:计算 x 的 n 次幂。
递归函数现在检查 y 是否等于 0,当 y 等于 0 时返回 1(因为任何数的 0 次幂都是 1)。当 y 不等于 0 时,函数将 x 乘以 fun(x, y-1) 的结果。 学习
页:
[1]