【问题标题】:calculating values for recursion functions [closed]计算递归函数的值
【发布时间】:2015-07-28 21:59:09
【问题描述】:

怎么办?在编写 4a() & 2a() 时应该是 4*a() 还是 4 * () 而不调用 a 函数?

4a(2 - 1) - 2a(2 - 2) = 4a( 1 ) – 2a( 0 ) = 4 
4a(3 - 1) - 2a(3 - 2) = 4a( 2 ) – 2a( 1 ) = 6
4a(4 - 1) - 2a(4 - 2) = 4a( 3 ) – 2a( 2 ) = 8

我这样做对吗?

php代码:

function a( $x ){
    print "a($x) = ";
    if( $x == 0 )   return 1;
    if( $x == 1 )   return 2;
//if( $x > 1 )  return 4*a( $x - 1)- 2*a( $x - 2); //this line A
//if( $x > 1 )  return 4*( $x - 1)- 2*( $x - 2);  //or this line B
}

for( $i=0; $i<10; $i++) print a($i) . "</br>";

对我来说,使用 B 更有意义,因为它对于一个简单地将输入内容加倍的函数变得有用。

【问题讨论】:

  • 你能否为 a(2) 验证这一点: 4*a(2-1) = 4*a(1) = 4*2 = 8, 2*a(2-2) = 2*a(0) = 2*1 = 2, 8-2 = 6.
  • 另外,这是一道数学题,不是编程题。
  • 我投票结束这个问题,因为这是一个数学问题而不是编程问题,不确定它是否符合网络中任何专业数学站点所需的标准不过。
  • 是的,错误的堆栈交换,也太宽泛了。标记。
  • 把它放在数学网站上需要密码中的特殊字符,但是它不会接受我尝试输入的内容,也不会显示什么是类作为特殊字符,因此我的原因是放在这里!

标签: php function math recursion


【解决方案1】:

问题陈述描述了一个递归函数,根据定义,它是一个调用自身的函数。当使用0(即a(0) 所以k = 0)调用时,结果是1。当使用1(即a(1) 所以k = 1)调用时,结果是2。对于大于或等于2k 值,您执行4 * a(k-1) - 2 * a(k-2)。这是函数调用自身的递归步骤。在这种情况下,它会调用自己两次,然后组合答案。

这里是 Ruby。你的答案不正确。

#!/usr/bin/env ruby

def a(k)
  return 2 if k == 1
  return 1 if k == 0
  return 4*a(k-1) - 2*a(k-2)
end

puts "a(2) = #{a(2)}"  // prints "a(2) = 6"
puts "a(3) = #{a(3)}"  // prints "a(3) = 20"
puts "a(4) = #{a(4)}"  // prints "a(4) = 68"

a(0) == 1a(1) == 2 是允许递归结束的基本情况。所有其他值都是从具有较小输入的值递归计算的。最终一切都以a(0)a(1) 结束,然后您只需分别替换为12

这是计算机如何解决a(4)

a(4) = 4*a(4-1) - 2*a(4-2)
     = 4*a(3) - 2*a(2)
     = 4*(4*a(2) - 2*a(1)) - 2*a(2)

...自从a(2) = (4*a(1) - 2*a(0))

     = 4*(4*(4*a(1) - 2*a(0)) - 2*a(1)) - 2*(4*a(1) - 2*a(0))
     = 4*(4*(4* 2   - 2* 1)   - 2* 2  ) - 2*(4* 2   - 2* 1  )
     = 4*(4*( 8     -  2  )   -   4   ) - 2*(  8    -  2    )
     = 4*(4*      6           -   4   ) - 2*      6
     = 4*(   24               -   4   ) -    12
     = 4*           20                  -    12
     =       80                         -    12
     =                     68

计算机就是这样做的。对于人类来说,计算k 的递增值更容易,因为当我们得到一个我们已经计算过的值时,我们可以直接替换这个值:

a(0) = 1     // k = 0, so answer is 1
a(1) = 2     // k = 1, so answer is 2
a(2) = 4*a(1) - 2*a(0) = 4*2  - 2*1 = 8  - 2  = 6
a(3) = 4*a(2) - 2*a(1) = 4*6  - 2*2 = 24 - 4  = 20
a(4) = 4*a(3) - 2*a(2) = 4*20 - 2*6 = 80 - 12 = 68

【讨论】:

    猜你喜欢
    • 2020-01-29
    • 2022-11-25
    • 2013-11-26
    • 2021-05-03
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多