我写了我的程序计算:
#include <stdio.h>
int cal(int a, int b){
if (a == 0){
return 1;
}
else if (a == 1){
return b;
}
else{
int c = a / b;
return (cal(a, c) + 1);
}
}
int main(){
printf("Enter values: ");
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", cal(a, b));
return 0;
}
但是当我运行我的程序时。我有一个错误。 所以。我的程序错误或编程C,C ++有什么问题? 感谢您查看我的问题。
答案 0 :(得分:1)
我很好!谢谢大家。这是我的失败。 我改变了我的程序:
#include <stdio.h>
int cal(int a, int b){
if (a == 0){
return 0;
}
else if (a == 1){
return b;
}
else if (b == 0){
return 1;
}
else if (b == 1){
return 0;
}
else{
return (cal(a, b/a) + 1);
}
}
int main(){
printf("Enter values: ");
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", cal(a, b));
return 0;
}
答案 1 :(得分:0)
int c = a / b;
如果不检查b
是否不允许0
,则会给您一个运行时错误。
添加条件以验证b
实际上不是0
,如果是,则不执行除法操作。
答案 2 :(得分:0)
你遇到了无限递归。看起来好像你有一个终止条件,但a
上的退出没有递归检查,这在你的电话中总是一样的。
按原样,您的算法分别在奇数和偶数递归步骤中调用cal(a, b)
和cal(a, a / b)
。最终,你的用完了。
修改你的算法,以便更深入的递归向基本状态发展,你应该检查。
如果你想计算a
到基数b
的对数,你应该保持基数b
在调用之间保持不变,然后逐渐将a
除以基数,直到到达值a
低于基数的情况:
int intlog(int a, int b)
{
if (a < b) return 0;
return cal(a / b, b) + 1;
}