c 中公式的递归函数:a(n)=a(n-1)+a(n-2)
recursive function in c for the furmula: a(n)=a(n-1)+a(n-2)
我正在尝试为公式编写递归函数:
a(n)=a(n-1)+a(n-2)
我试着简单地写出来:
unsigned int ladder(unsigned int n)
{
unsigned int ret=0;
if (n < 1)
return ret;
ret = ladder(n - 1) + ladder(n - 2);
}
但是在调用 ladder(n-2) 时进入堆栈溢出
(出于某种原因,它将 n 设置为一个非常大的整数)
我觉得我遗漏了一些非常基本的东西,但又想不通是什么。
函数returns当n不小于1时什么都不做
同样,当 n 等于 1 时,表达式 n - 2 产生可以存储在 unsigned int 类型对象中的最大值。
函数可以通过以下方式声明和定义
unsigned long long int ladder( unsigned int n )
{
return n < 2 ? n : ladder( n - 1 ) + ladder( n - 2 );
}
这里有一个演示程序。
#include <stdio.h>
unsigned long long int ladder( unsigned int n )
{
return n < 2 ? n : ladder( n - 1 ) + ladder( n - 2 );
}
int main( void )
{
for ( unsigned int i = 0; i < 25; i++ )
{
printf( "%llu ", ladder( i ) );
}
putchar( '\n' );
}
程序输出为
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368
我正在尝试为公式编写递归函数:
a(n)=a(n-1)+a(n-2)
我试着简单地写出来:
unsigned int ladder(unsigned int n)
{
unsigned int ret=0;
if (n < 1)
return ret;
ret = ladder(n - 1) + ladder(n - 2);
}
但是在调用 ladder(n-2) 时进入堆栈溢出
(出于某种原因,它将 n 设置为一个非常大的整数)
我觉得我遗漏了一些非常基本的东西,但又想不通是什么。
函数returns当n不小于1时什么都不做
同样,当 n 等于 1 时,表达式 n - 2 产生可以存储在 unsigned int 类型对象中的最大值。
函数可以通过以下方式声明和定义
unsigned long long int ladder( unsigned int n )
{
return n < 2 ? n : ladder( n - 1 ) + ladder( n - 2 );
}
这里有一个演示程序。
#include <stdio.h>
unsigned long long int ladder( unsigned int n )
{
return n < 2 ? n : ladder( n - 1 ) + ladder( n - 2 );
}
int main( void )
{
for ( unsigned int i = 0; i < 25; i++ )
{
printf( "%llu ", ladder( i ) );
}
putchar( '\n' );
}
程序输出为
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368