对于用户输入的两个数字x
和n
,我的代码需要找到由以下公式递归定义的Hn(x):
我正在尝试实现该函数的递归版本和迭代版本。但是我想我理解错了,因为我的代码由于H(n)和Hn上的错误而不能编译
#include "pch.h"
#include <iostream>
int H(int n, int x) //function for recursion
{
if (n < 0) return -1;
else if (n == 0) return 1;
else if (n == 1) return 2 * x;
return 2 * x * H(n) * x - 2 * n * H(n - 1) * x;
}
int H1(int n, int x) //function for Iterator
{
int *H1 = new int[n + 1];
H[0] * x = 1;
H[1] * x = 2 * x;
for (int i = 0; i <= n; i++)
{
H[i] * x = 2 * x * H[n] * x - 2 * n * H[n - 1] * x;
}
return H1(n) * x;
}
int main()
{
int n, x;
std::cout << "Enter the number n: ";
std::cin >> n;
std::cout << "Enter the number x: ";
std::cin >> x;
std::cout << "Rec = " << H[n] * x std::endl;
std::cout << "Iter = " << H1[n] * x std::endl;
}
这是令人困惑的,我为此道歉,因为我对函数完全陌生。
我已经用斐波那契数列做到了这一点。在这里,我只对函数f(x)
使用了一个参数,即f(int n){... }
,但这里我与函数H(int n, int x)
中的两个参数有点混淆,其中n
是H
的索引,而x
是一个整数。
发布于 2018-12-06 01:48:23
是的,您需要将按矩阵索引的函数转换为具有两个参数的函数。
递归版本几乎没问题,除了索引中的一些变化:
int H(int n, int x) // recursive version
{
if (n <= 0)
return -1;
else if (n == 1)
return 1;
else if (n == 2)
return 2 * x;
else
return 2 * x * H(n-1, x) - 2 * n * H(n - 2, x); // shift n+1, n n-1 to n, n-1 n-2
}
你的迭代版本需要返工,因为如果可能的话,你应该将它写成一个循环,而不需要兑现你不再需要的值。例如:
int Hi(int n, int x) //iterative version
{
if (n <= 0)
return -1;
else if (n == 1)
return 1;
int am2 = 1; // start for for n-2
int am1 = 2*x; // start for n-1
if (n == 2)
return am1;
int am;
for (int i=3; i<=n; i++) {
am = 2*x*am1 - 2*i*am2; // calculate Hn from Hn-1 and Hn-2
//prepare next interation
am2=am1;
am1=am;
}
return am;
}
发布于 2018-12-06 01:51:41
你写道:
int H(int n, int x) //function for recursion
{
if (n < 0) return -1;
else if (n == 0) return 1;
else if (n == 1) return 2 * x;
return 2 * x * H(n) * x - 2 * n * H(n - 1) * x;
}
你离工作程序不远了。删除H1
函数。让我们看看:
int H(int n, int x)
{
switch(n)
{
// H_0(x) = 1
case 0: return 1;
// H_1(x) = 2x
case 1: return 2 * x;
// H_{n+1}(x) = 2x H_n(x) - 2n H_{n - 1}(x)
default:
return 2*x*H(n-1, x) - 2*(n-1)*H(n-2, x);
}
}
技巧部分是认识到H_{n+1}(x) = 2x H_n(x) - 2n H_{n - 1}(x)
和return 2*x*H(n-1, x) - 2*(n-1)*H(n-2, x);
中的n
是不一样的,它们有一个不同。
现在,您只需要处理用户I/O,并使用用户输入调用H
函数。
https://stackoverflow.com/questions/53637670
复制相似问题