我正在嘗試為公式撰寫一個遞回函式:
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 設定為一個非常大的整數)
我覺得我錯過了一些非常基本的東西,但不知道是什么。
uj5u.com熱心網友回復:
當 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/482918.html
