为什么会出现 "unhandled exception" 错误,我该如何解决?
Why do I get "unhandled exception" error and how can I fix it?
我正在尝试编写一个使用 2 个递归函数的代码; 'I' 和 'U' 和一个非递归函数 'f'.我想要实现的是 运行 递归函数 I "steps1" 很多次 然后停在这个级别然后 运行 递归函数 U "steps2" 多次 。
之后,最后 运行 非递归函数 f 在函数 U's 迭代结束。
例如:
让 steps1=1 和 steps2=1 然后,
我将迭代函数 'I',1 次(steps1)并得到:
I(n)= 3*I(n/2)+7*n-3
然后,我将迭代函数 U,1 次(steps2)for n/2值。然后,插入它而不是 I(n/2),因此我将计算:
I(n)= 3*[U(n/2)]+7*n-3= 3*[2*U(n/6)+2*(n/2)-9] = 3*2*U(n/6)+3*2*(n/2)-3*9
现在将最后一个函数 f(n/6) 插入到这个等式中:
3*2*U(n/6)+3*2*(n/2)-3*9=3*2*f(n/6)+3*2*(n/2)-3*9
因为 f 是非递归的,这会给我结果。
当我 运行 我得到我的代码时,"unhandeled exception" 错误。有人可以帮我找到这个错误的原因吗?我的代码在某处有误吗?有人可以帮我解决这个问题吗?我不确定我的代码是否也完全符合我的要求?
#include<stdlib.h>
#include<bits/stdc++.h>
using namespace std;
int f(int n)
{
return (n-1)*(n-1);
}
/* step2 many iteration of the function U and then function f */
int U(int n , int steps2, int counter2=0)
{
if(counter2==steps2){
return f(n);
}
return 2*U(n/3, steps2, counter2+1)+2*n-9;
}
/* step1 many iteration of the function I and then function U*/
int I(int n , int steps1,int steps2, int counter1=0, int counter2=0)
{
if(counter1==steps1){
return U(n,steps2,counter2);
}
return 3*I(n/2, steps1, counter1+1)+7*n-3;
}
int main(){
int n, steps1,steps2;
cout<< " Enter 'n' value which is divisable by both 2 and 3"<<"\n";
cin>>n;
cout<< " Enter iteration count for I"<<"\n";
cin>>steps1;
cout<< " Enter iteration count for U"<<"\n";
cin>>steps2;
cout<< " result:" << I(n,steps1,steps2)<<"\n";
getchar();
return 0;
}
我编译并 运行 你的程序,看起来你遇到了堆栈溢出。函数 I
的递归不正确。即永远不会达到您的基本情况。在调用 I
的每个位置,您只传递 3 个参数,因此 counter1
的值始终为 0,即默认值。此外,I
始终被调用,因此 steps1
始终具有相同的值(来自用户的输入)。所以 if(counter1==steps1){
永远不会是真的。
对未来问题的一些建议,在解决此类问题时,您可以做的最简单的事情之一就是在每个函数的开头添加一个 cout
。打印函数名称和参数值。另一种选择是连接调试器并设置一些断点。学习如何使用 C++ 调试器会非常非常方便。
我正在尝试编写一个使用 2 个递归函数的代码; 'I' 和 'U' 和一个非递归函数 'f'.我想要实现的是 运行 递归函数 I "steps1" 很多次 然后停在这个级别然后 运行 递归函数 U "steps2" 多次 。 之后,最后 运行 非递归函数 f 在函数 U's 迭代结束。
例如:
让 steps1=1 和 steps2=1 然后,
我将迭代函数 'I',1 次(steps1)并得到:
I(n)= 3*I(n/2)+7*n-3
然后,我将迭代函数 U,1 次(steps2)for n/2值。然后,插入它而不是 I(n/2),因此我将计算:
I(n)= 3*[U(n/2)]+7*n-3= 3*[2*U(n/6)+2*(n/2)-9] = 3*2*U(n/6)+3*2*(n/2)-3*9
现在将最后一个函数 f(n/6) 插入到这个等式中:
3*2*U(n/6)+3*2*(n/2)-3*9=3*2*f(n/6)+3*2*(n/2)-3*9
因为 f 是非递归的,这会给我结果。
当我 运行 我得到我的代码时,"unhandeled exception" 错误。有人可以帮我找到这个错误的原因吗?我的代码在某处有误吗?有人可以帮我解决这个问题吗?我不确定我的代码是否也完全符合我的要求?
#include<stdlib.h>
#include<bits/stdc++.h>
using namespace std;
int f(int n)
{
return (n-1)*(n-1);
}
/* step2 many iteration of the function U and then function f */
int U(int n , int steps2, int counter2=0)
{
if(counter2==steps2){
return f(n);
}
return 2*U(n/3, steps2, counter2+1)+2*n-9;
}
/* step1 many iteration of the function I and then function U*/
int I(int n , int steps1,int steps2, int counter1=0, int counter2=0)
{
if(counter1==steps1){
return U(n,steps2,counter2);
}
return 3*I(n/2, steps1, counter1+1)+7*n-3;
}
int main(){
int n, steps1,steps2;
cout<< " Enter 'n' value which is divisable by both 2 and 3"<<"\n";
cin>>n;
cout<< " Enter iteration count for I"<<"\n";
cin>>steps1;
cout<< " Enter iteration count for U"<<"\n";
cin>>steps2;
cout<< " result:" << I(n,steps1,steps2)<<"\n";
getchar();
return 0;
}
我编译并 运行 你的程序,看起来你遇到了堆栈溢出。函数 I
的递归不正确。即永远不会达到您的基本情况。在调用 I
的每个位置,您只传递 3 个参数,因此 counter1
的值始终为 0,即默认值。此外,I
始终被调用,因此 steps1
始终具有相同的值(来自用户的输入)。所以 if(counter1==steps1){
永远不会是真的。
对未来问题的一些建议,在解决此类问题时,您可以做的最简单的事情之一就是在每个函数的开头添加一个 cout
。打印函数名称和参数值。另一种选择是连接调试器并设置一些断点。学习如何使用 C++ 调试器会非常非常方便。